Автор Тема: Загрузка файла в админке модуля  (Прочитано 5503 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ermy

  • The sign above my avatar
  • Опытный лис
  • ****
  • Сообщений: 323
  • Авторитет: 15
  • Пол: Мужской
  • The sign below my avatar
    • Просмотр профиля
Загрузка файла в админке модуля
« : 12 ноября 2014, 16:01:36 »
Пытаюсь разобраться с написанием модуля. Для начала просто хочу после загрузки файла вывести его имя
в start_admin()
//Формирую контент
$html = '<form type="post" action=""><input type="file" name="pdf"><input type="submit"></form>';
//Если файл загружен, то вывожу его имя
if ($_FILES['pdf']['name']) {
$content .= $_FILES['pdf']['name'];
};
Пишет
Notice: Undefined index: pdf in Z:\home\santa.ru\www\modules\automailing\automailing.class.php on line 118

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\santa.ru\www\modules\automailing\automailing.class.php:118) in Z:\home\santa.ru\www\include\kernel.class.php on line 1445
Вопрос - как правильно загрузить файл ?
Спасибо.

Оффлайн Rinat

  • Старый лис
  • *****
  • Сообщений: 602
  • Авторитет: 36
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #1 : 12 ноября 2014, 16:46:25 »
//Формирую контент
$html = '<form type="post" action=""><input type="file" name="pdf"><input type="submit"></form>';
//Если файл загружен, то вывожу его имя
if (isset($_FILES['pdf']['name'])) {
$content .= $_FILES['pdf']['name'];
};

Оффлайн ermy

  • The sign above my avatar
  • Опытный лис
  • ****
  • Сообщений: 323
  • Авторитет: 15
  • Пол: Мужской
  • The sign below my avatar
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #2 : 12 ноября 2014, 16:55:31 »
Спасибо, исправил.
Выбираю файл и загружаю его. Условие if почему-то не срабатывает.

Оффлайн DET

  • Местный лис
  • ***
  • Сообщений: 169
  • Авторитет: 4
  • Пол: Мужской
  • DET
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #3 : 12 ноября 2014, 16:57:57 »
А что за модуль такой automailing ????

Оффлайн ermy

  • The sign above my avatar
  • Опытный лис
  • ****
  • Сообщений: 323
  • Авторитет: 15
  • Пол: Мужской
  • The sign below my avatar
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #4 : 12 ноября 2014, 17:03:34 »
Это мой первый модуль, который пытаюсь разработать.

Оффлайн Rinat

  • Старый лис
  • *****
  • Сообщений: 602
  • Авторитет: 36
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #5 : 12 ноября 2014, 17:15:16 »
напишите там var_dump($_FILES);
Посмотрите, что выдаст.

Оффлайн ermy

  • The sign above my avatar
  • Опытный лис
  • ****
  • Сообщений: 323
  • Авторитет: 15
  • Пол: Мужской
  • The sign below my avatar
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #6 : 13 ноября 2014, 10:03:56 »
Вот что пишет (вне зависимости был ли файл загружен или нет):
array(0) { }

PS На всякий случай прикладываю мой модуль.
PSS Работаю локально на денвере.

Оффлайн Rinat

  • Старый лис
  • *****
  • Сообщений: 602
  • Авторитет: 36
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #7 : 13 ноября 2014, 12:15:49 »
Так попробуйте:

html = '<form type="post"  enctype="multipart/form-data  action=""><input type="file" name="pdf"><input type="submit"></form>';

Оффлайн ermy

  • The sign above my avatar
  • Опытный лис
  • ****
  • Сообщений: 323
  • Авторитет: 15
  • Пол: Мужской
  • The sign below my avatar
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #8 : 14 ноября 2014, 13:33:29 »
Таже самая петрушка.
array(0) { }

Оффлайн Rinat

  • Старый лис
  • *****
  • Сообщений: 602
  • Авторитет: 36
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #9 : 14 ноября 2014, 15:13:01 »
Да, вижу. Там редирект происходит после получения данных автоматом.
Даные получаются, но затем происходит редирект.

Оффлайн ermy

  • The sign above my avatar
  • Опытный лис
  • ****
  • Сообщений: 323
  • Авторитет: 15
  • Пол: Мужской
  • The sign below my avatar
    • Просмотр профиля
Re: Загрузка файла в админке модуля
« Ответ #10 : 20 ноября 2014, 16:25:06 »
Все, разобрался)
Короче обязательно нужно в action формы подставлять урл ветки обработчика.
В общем сначала:

Основная ветка, где выбираем файл для загрузки
           
case 'main':
$html='';
$html .= str_replace('%form_action%', $kernel->pub_redirect_for_form('save_data'), $arr['begin']);//заменяем action на ветку-обработчик
return $html;
break;

Шаблон формы
<!--@begin -->
<form action="[b]%form_action%[/b]" method="post" enctype="multipart/form-data">
...
</form>

А вот сама ветка обработчик
case 'save_data':
move_uploaded_file ($_FILES['file']['tmp_name'], $uploads_dir.$_FILES['file']['name']);//перемещаем файл
$kernel->pub_redirect_refresh_reload('main');//перекидываем на основную ветку
break;

Все заливает на ура!

Это, конечно упрощенный вариант. Нужно еще писать данные в БД, проверять ранее загруженный файл и удалять его.  А в основной ветке выводить инфу о предыдущих загрузках... и т.д.

PS Нашел функцию ядра pub_file_move, которая не описана в документации, но и не работает...