Загрузка файлов на сервер через сниппет eform

1) Создаём чанк {{Upload_File}} со следующим содержимым:

  1.  
  2. [!ParseForm!]
  3. [!eForm? &formid=`sendfile` &to=`XXX@YYY.com` &tpl=`Upload_File_tpl` &vericode=`1` &report=`Upload_File_Report` &subject=`Сообщение с сайта XXX.RU` &eFormOnBeforeFormParse=`ParseForm` !]
  4.  

2) Создаём чанк {{Upload_File_tpl}} со следующим содержимым:

  1.  
  2. <div id="forma">
  3. <p><span style="color:#FF0000;">[+validationmessage+]</span></p>
  4. <br/>
  5. <form method="post" action="[~[*id*]~]" enctype="multipart/form-data">
  6. <input type="hidden" name="formid" value="sendfile" />
  7.  
  8. <table id="ordertable" cellpadding="0" cellspacing="0" >
  9. <tr >
  10. <td >Ваше Имя:</td>
  11. <td ><input type="text" name="Name" size="40" maxlength="60" eform="Ваше Имя::1" /></td>
  12. </tr>
  13. <tr >
  14. <td >Ваш email адрес:</td>
  15. <td><input type="text" name="email" size="40" maxlength="60" eform="Ваш email:email:1" /></td>
  16. </tr>
  17. <tr >
  18. <td >Текст письма:</td>
  19. <td><textarea cols="40" rows="6" name="comments" eform="Текст письма:html:1"></textarea></td>
  20. </tr>
  21. <tr >
  22. <td >Приложить файл:</td>
  23. <td>
  24. <input type="file" name="attach" accept="*/*" eform="Attachment:file:0" />
  25. </td>
  26. </tr>
  27. <tr >
  28. <td colspan="2">Пожалуйста введите код: (Чтобы предупредить спам)</td>
  29. </tr>
  30. <tr >
  31. <td ><img src="[+verimageurl+]" alt="verification code" /></td>
  32. <td><input type="text" name="vericode" size="20" /></td>
  33. </tr>
  34. <tr>
  35. <td>&nbsp;</td>
  36. <td><input type="submit" name="submit" value="Отправить" ></td>
  37. </tr>
  38.  
  39. </table>
  40.  
  41. </form>
  42. </div>

Не забываем вместо accept="*/*" поставить соответсвующий тип MIME

3) Создаём чанк {{Upload_File_Report}} со следующим содержимым:

  1.  
  2. <p>Это письмо было отправлено с сайта XXX.ru</p>
  3. <table>
  4. <tr ><td>Name:</td><td>[+Name+]</td></tr>
  5. <tr ><td>Email:</td><td>[+email+]</td></tr>
  6. <tr ><td>Текст сообщения:</td><td>[+comments+]</td></tr>
  7. </table>
  8. <p>Attachment:[+attach+]</p>
  9.  

4) Создаём сниппет [[ParseForm]] со следующим содержимым:

  1.  
  2. <?php
  3. function ParseForm( &$fields ){
  4. //global $modx;
  5.  
  6. $target_path = "/home/путь к вашему хосту/public_html/assets/images/upload/";
  7. $target_path = $target_path . basename( $_FILES['attach']['name']);
  8.  
  9. if(move_uploaded_file($_FILES['attach']['tmp_name'], $target_path)) {
  10. echo "Файл ". basename( $_FILES['uploadedfile']['name']). " был загружен.";
  11. } else{
  12. echo "Загрузить файл не удалось , попробуйте ещё раз!";
  13. }
  14.  
  15. return true;
  16. }
  17. ?>
  18.  

Важно:
Не забудьте исправить путь к папке куда Вы собираетесь поместить загруженный файл - $target_path = "/home/путь к вашему хосту/public_html/assets/images/upload/"; Этот путь должен быть верным !

5) Вставляем {{Upload_File}} на странице или в шаблоне, где хотелось бы увидеть форму.
Не большое замечание, проверьте настройки вашего хостинга и размер допустимого к загрузке файла.

 

Последнее изменение документа: 24 Апрель 2011
Showing comments 1 to 10 of 15 | Next | Last
nik_neman
Posts: 14
Comment
Проблема с $target_path
Reply #15 on : Пнд Август 22, 2011, 19:58:32
День добрый.
Подскажите, пожалуйста, как правильно прописать путь в $target_path.
На локалке всё ништяк, а вот на хостинге пишет что загрузило всё норм, а вот в той папке я данный файл не вижу.
И ещё один момент.
Сниппет ParseForm я указал некэшированным, бо если указать кэшированым, то появляеться просто пустая страница.
Anonymous
Posts: 14
Comment
Re: Загрузка файлов на сервер через сниппет eform
Reply #14 on : Втр Май 31, 2011, 18:57:48
Thanks a lot I've been searching for this all day, good job!!!!!
Одиночка Айс
Posts: 14
Comment
Все работает!!!
Reply #13 on : Чтв Апрель 07, 2011, 15:31:41
Сорри, мужики, прошляпил одну букву в названии, спасибо за посты.
Одиночка Айс
Posts: 14
Comment
Не работает!!!
Reply #12 on : Чтв Апрель 07, 2011, 14:35:05
Все подключил, нифига не работает, ParseForm не хочет искать (((
Anonymous
Posts: 14
Comment
Re: Загрузка файлов на сервер через сниппет eform
Reply #11 on : Срд Октябрь 06, 2010, 18:15:45
Вариант со вставкой в базу:

<?php
function ParseForm( &$fields ){
global $modx;
$target_path = "/var/www/modx_valera/assets/upload/";
$target_path = $target_path . basename( $_FILES['attach']['name']);

if(move_uploaded_file($_FILES['attach']['tmp_name'], $target_path)) {
echo "Файл ". basename( $_FILES['attach']['name']). " был загружен.";

// insert record into DB
$db = $modx->db->config['dbase'];
$pre = $modx->db->config['table_prefix'];
$time = time();

$form = isset($_POST) ? $_POST : array();
// Check that POST hasn't already been escaped by magic_quotes
if(!get_magic_quotes_gpc()) {
$name = $modx->db->escape($form['Name']);
$email = $modx->db->escape($form['email']);
$comments = $modx->db->escape($form['comments']);
$attach = $modx->db->escape($_FILES['attach']['name']);
}
$insert = array('name'=>$name, 'email'=>$email, 'comments'=>$comments, 'attach '=>$attach );
$submission_key = $modx->db->insert($insert,"{$db}.{$pre}applications");


} else if(! empty($_POST)){
echo "Загрузить файл не удалось , попробуйте ещё раз!";
}

return true;
}
?>
Дмитрий
Posts: 14
Comment
Re: Загрузка файлов на сервер через сниппет eform
Reply #10 on : Срд Июнь 30, 2010, 15:17:15
А кто нибудь может сказать, почему при любом типе MIME закачивается любой тип файла, кроме FLV он же flv?
Nikola
Posts: 14
Comment
Параметр в
Reply #9 on : Срд Июнь 02, 2010, 00:53:48
Подскажите, как в вызове сниппета создать параметр, например и чтобы этот параметр определял папку в которую будет загружен файл типа того: $target_path = "/home/путь к вашему хосту/public_html/assets/images/['имя_папки']/"
Sergey
Posts: 14
Comment
Re: Загрузка файлов на сервер через сниппет eform
Reply #8 on : Чтв Апрель 22, 2010, 15:54:23
Прошу прощения, все сделал внимательно. Все правильно. Предыдущий пост прошу не принимать в расчет.
Sergey
Posts: 14
Comment
Re: Загрузка файлов на сервер через сниппет eform
Reply #7 on : Чтв Апрель 22, 2010, 14:50:26
Бесполезно делать echo в коде сниппета функции-обработчика . Его вывод никуда не выводится. Кроме того, почему-то так и не удалось получить доступ к супермассиву _FILES
svarga
Posts: 14
Comment
Re: Загрузка файлов на сервер через сниппет eform
Reply #6 on : Пнд Февраль 22, 2010, 23:44:35
возможно ли задавать максимальный размер загружаемого файла в скрипте?
Showing comments 1 to 10 of 15 | Next | Last

Write a comment

  • Required fields are marked with *.

If you have trouble reading the code, click on the code itself to generate a new random code.