Форум русской поддержки Joomla!® CMS
17.08.2017, 03:31:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Основной курс по Joomla
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Загрузка и сохранение изображения в компоненте

 (Прочитано 314 раз)
0 Пользователей и 1 Гость смотрят эту тему.
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« : 17.01.2017, 12:28:20 »

Здравствуйте!
В компоненте формирования заявок от пользователей, среди прочей информации, которую вводит пользователь, должна быть загрузка изображения (.png), которое надо сохранить на сервере и записать в БД.
В site/com_odere/views/html/default.php поле для файла представлено в блоке Структурная формула (name=img_png):
Показать текстовый блок
в
В site/com_order/models/forms/ поле представлено (среди прочих полей):
Показать текстовый блок
В site/com_order/controllers/registration/ register.php
Код:
$app   = JFactory::getApplication();
/* файл */
$jinput = $app->input;
if ($file = $jinput->files->get('img_png', null, 'files', 'array')) {
if ($filename = JFile::makeSafe($file['name'])) {
             $src = $file['tmp_name'];              
            $path =JPATH_SITE ."/components/com_order/assets/images/";
            $dest =$path.'uploaded_files '.$filename;
           if (JFile::upload($src, $dest)) {
JFile::delete($dest);
 } else {
                              JFactory::getApplication()->enqueueMessage('Не получается обработать файл', 'error');
                           }
} else {
JFactory::getApplication()->enqueueMessage('Нет названия файла', 'error');
}
} else {
JFactory::getApplication()->enqueueMessage('Нет файла', 'error');
}
Так вот у меня получается 'Нет файла'
Все остальные поля формы сохраняются, а вот изображение получить не могу.
Правда, в компоненте вид формы зависит от типа записи, и в модели я подставляю нужную форму
Показать текстовый блок
« Последнее редактирование: 17.01.2017, 12:35:47 от GuDeVic » Записан
SmokerMan
Профи
********

Репутация: +715/-26
Offline Offline

Пол: Мужской
Сообщений: 5379



« Ответ #1 : 17.01.2017, 12:49:13 »

Цитировать
$file = $jinput->files->get('img_png', null, 'files', 'array')
это что за зверь? откуда там четвертый параметр взялся?)
сделать var_dump($_FILES) и посмотреть что приходит
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #2 : 17.01.2017, 13:06:20 »

это что за зверь? откуда там четвертый параметр взялся?)
сделать var_dump($_FILES) и посмотреть что приходит
Вот отсюда взяла (от Fedor Vlasenko) http://joomlaforum.ru/index.php?topic=263530.0
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #3 : 17.01.2017, 13:20:24 »

Да, var_dump($_FILES) (в модели)правильно изображение представляет
Показать текстовый блок
« Последнее редактирование: 17.01.2017, 13:42:46 от GuDeVic » Записан
SmokerMan
Профи
********

Репутация: +715/-26
Offline Offline

Пол: Мужской
Сообщений: 5379



« Ответ #4 : 17.01.2017, 14:09:41 »

а если так?
Цитировать
$files = $jinput->files->get('jform', null, 'array');
if (!empty($files)) {
    foreach ($files as $file) {
        var_dump($file);
    }
}
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #5 : 17.01.2017, 14:32:45 »

а если так?
Тогда получается так:
Показать текстовый блок
« Последнее редактирование: 17.01.2017, 14:38:37 от GuDeVic » Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #6 : 18.01.2017, 14:59:03 »

Спасибо.
Я вставила var_dump, на экране появились сведения о загружаемом файле, и только они.
Убираю var_dump - сохраняю файлы, архивирую, загружаю компонент - ничего не меняется.
Всё выглядит так, как будто продолжается работа с неисправленным компонентом.
И наоборот, если возвращаюсь к версии, где не было var_dump и вставляю команду var_dump - тоже ничего не меняется, как будто этой команды нет.
Ничего понять не могу - ведь как-то же первый раз по Вашему совету вставила.

Записан
SmokerMan
Профи
********

Репутация: +715/-26
Offline Offline

Пол: Мужской
Сообщений: 5379



« Ответ #7 : 18.01.2017, 15:59:01 »

Убираю var_dump - сохраняю файлы, архивирую, загружаю компонент - ничего не меняется.
Всё выглядит так, как будто продолжается работа с неисправленным компонентом.
что архивирую и куда загружаю?)
и причем здесь var_dump?
это я просто написал для отладки что бы можно посмотреть приходит файл или нет
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #8 : 18.01.2017, 16:20:45 »

что архивирую и куда загружаю?)
и причем здесь var_dump?
это я просто написал для отладки что бы можно посмотреть приходит файл или нет
var_dump  я вставляла в контроллер и в метод register (сохранение записи) в модели. Потом эти команды убрала (закомментировала), сохранила файлы, заархивировала компонент, загрузила его, но после загрузки всё выглядело так, как будто dump_var не убран.
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #9 : 18.01.2017, 17:55:12 »

Код:
JFile::makeSafe($file['name'])
Оффтоп - и это всё? Маловато для проверки
https://cmscafe.ru/razrabotka/547-sozdaem-bezopasnye-rasshireniya-dlya-joomla#file-uploads

У Вас сейчас дыра, как было у AdsManager Опасное расширения для Joomla - AdsManager все версии, разработчик не добросовестный!
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #10 : 18.01.2017, 18:37:02 »

Код:
JFile::makeSafe($file['name'])
Оффтоп - и это всё? Маловато для проверки

https://cmscafe.ru/razrabotka/547-sozdaem-bezopasnye-rasshireniya-dlya-joomla#file-uploads


У Вас сейчас дыра, как было у AdsManager Опасное расширения для Joomla - AdsManager все версии, разработчик не добросовестный!
Спасибо. Маловато будет! Это просто для тестирования возможности загрузки.
Ещё раз спасибо за дыру, в смысле, что, скорее всего это дыра, а не я сошла с ума (пока что).
Что делать? Удавиться?
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #11 : 18.01.2017, 19:01:46 »

AdsManager у меня нет, а вот ajaxupload вчера вечером установила. Может совпадение, конечно, но в своём компоненте до загрузки изображений не дошла, тк. не могла получить информацию о загруженном файле (именно поэтому я и обратилась за помощью)
Записан
SmokerMan
Профи
********

Репутация: +715/-26
Offline Offline

Пол: Мужской
Сообщений: 5379



« Ответ #12 : 18.01.2017, 19:44:01 »

var_dump  я вставляла в контроллер и в метод register (сохранение записи) в модели. Потом эти команды убрала (закомментировала), сохранила файлы, заархивировала компонент, загрузила его, но после загрузки всё выглядело так, как будто dump_var не убран.
причем тут сборка и установка?
все манипуляции надо производить в файлах на уже установленном расширении, а потом уже когда все готово и работает думать уже о его сборке, упаковке и т.д.
файл то получилось загрузить или нет? Azn

Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #13 : 18.01.2017, 20:34:56 »

причем тут сборка и установка?
все манипуляции надо производить в файлах на уже установленном расширении, а потом уже когда все готово и работает думать уже о его сборке, упаковке и т.д.
файл то получилось загрузить или нет? Azn



Речь идёт о компонентне, который надо было дополнить возможностью загрузки пользователем файла(изображения). Т.е. пользователь выбирает тип заявки, заполняет её, заявка поступает исполнителю и тд и тп.  Но. Теперь понадобилось форму заявки дополнить возможностью ввода структурной формулы (изображение.png), чтобы исполнитель имел доп. информацию. В этом компоненте я пыталась сделать загрузку файла.
Пока не получилось. Потому что ...не знаю, что случилось, но ни print_r, ни var_dump..Ладно, попробую успокоиться.
Не сама же я от руки написала
Код:
array(1) { ["jform"]=> array(5) { ["name"]=> array(1) { ["img_png"]=> string(23) "Gerb_Novosibirsk_50.png" } ["type"]=> array(1) { ["img_png"]=> string(9) "image/png" } ["tmp_name"]=> array(1) { ["img_png"]=> string(14) "/tmp/php0HB8TX" } ["error"]=> array(1) { ["img_png"]=> int(0) } ["size"]=> array(1) { ["img_png"]=> int(5413) } } }
Так как к этому массиву обратиться, чтобы прочесть имя загруженного файла, если у поля имя img_png?
Записан
fsv
Практически профи
*******

Репутация: +368/-2
Offline Offline

Пол: Мужской
Сообщений: 2553


« Ответ #14 : 18.01.2017, 20:54:23 »

Цитировать
Так как к этому массиву обратиться, чтобы прочесть имя загруженного файла, если у поля имя img_png?
В контроллере:
Код
$files = $this->input->files->get('jform', array(), 'array');
foreach( $files['img_png'] as $img )
{
   //todo
}

Попробуйте более четко излагать мысли. Ничего не понятно в теме.
Записан
GuDeVic
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 159


« Ответ #15 : 18.01.2017, 21:21:51 »

В контроллере:
Код
$files = $this->input->files->get('jform', array(), 'array');
foreach( $files['img_png'] as $img )
{
   //todo
}

Попробуйте более четко излагать мысли. Ничего не понятно в теме.

Вообще-то в теме было написано и про компонент, и про проблему, и приведены  коды.
« Последнее редактирование: 18.01.2017, 22:14:10 от GuDeVic » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet