Как добавить поле загрузки изображений в модуль, чтобы оно работало?


#1

В общем необходимо в модуле (отзывы клиентов, не по товарам) добавить фотографию клиента.
По примеру модуля “Блог”, создаю файл hooks/discussion/add_post.pre.tpl в своём модуле.
Всавляю опять же по примеру кода из “Блог” следующее содержимое:

<div class="controls">
	{include file="common/attach_images.tpl" image_name="discussion_image" image_object_type="discussion" image_pair=$page_data.main_pair no_detailed=true hide_titles=true}
</div>

Заменил только image_name и image_object_type “blog” на “discussion”.
Если с текстовыми полями, которые по официальной видиоинструкции прокатывает, то с картинками почему то нет? Простого решения я так понимаю нет?
В форме в админке поле появляется, при отправке файла формы ошибок нет, как и записи о загруженном файле в таблицах БД


#2

Первым делом убедитесь, что на форме висит свойство enctype=“multipart/form-data”

Ну и сами функции по обработке изображений в контроллере не забудьте


#3

В форме enctype=“multipart/form-data” имеется.
А вот по поводу функций имется вопрос.
Согласно https://www.cs-cart.ru/docs/4.11.x/developer_guide/core/images_subsystem.html#id2 ничего не получается.


#4

Делайте в функции где сохраняете(думаю в fn_add_discussion_post), а лучше в хуке

fn_attach_image_pairs('discussion_image', 'discussion', $post_data['post_id']);

Где $post_data[‘post_id’] - id вашего поста


#5

Огромное спасибо! В базе записи появились вроде. А не подскажите, как теперь достучаться до картинок? Согласно той же инструкции, снова не могу понять, в какие функции добавить $mod[‘main_pair’] = fn_get_image_pairs($mod_id, ‘common’, ‘M’, ‘mod’); и fn_delete_image_pairs($mod_id, ‘common’, ‘mod’); и как для моего случая их преобразовать?


#6

В fn_get_discussion_posts есть хуки

Там делаете foreach по $posts и получайте картинку. Должно получиться что-то типа

if (!empty($posts)) {
    foreach ($posts as &$post) {
        $post['main_pair'] = fn_get_image_pairs($post['post_id'], 'discussion', 'M', true, true);
    }
}

(!) Не тестировано


#7

Спасибо! Сам вчера разобрался. Сделал вот так:
foreach ($posts as $k => $post) {
if (isset($post[‘ip_address’])) {
$posts[$k][‘ip_address’] = fn_ip_from_db($post[‘ip_address’]);
$posts[$k][‘main_pair’] = fn_get_image_pairs($post[‘post_id’], ‘discussion’, ‘M’);
}
}
Пока топорно, напрямую, как доделаю, перенесу в хуки.
А вот теперь осталась последняя проблема, как с фронтенда отправить картинку?! Может есть ответ, пока ещё не разобрался!


#8

Там есть файл common/fileuploader.tpl

Используется в модуле форм


#9

Да, я изначально пробовал через него, но не получается, добавляю поле в форму так:

{script src=“js/tygh/fileuploader_scripts.js”}
{include file=“common/fileuploader.tpl” var_name=“fb_files[$element.element_id]”}

Поле есть, форма отправляется без ошибок, в админке изображения нет. Может какие параметры надо передавать? Или var_name должен по другому называться?


#10

Вот что то я совсем не пойму, как через common/fileuploader.tpl можно это реализовать?
common/attach_images.tpl который в админке, использует common/fileuploader.tpl, но по моему, он отличается от того, что есть во фронтенде. Я честно говоря, вообще не помню ни одного модуля из базового комплекта CS-CART, который бы загружал что нибудь с фронтенда?!


#11

В 2 местах используется - в конструкторе форм и опциях с типом файл. Наши программисты его используют в доработках без проблем. Главное, разобраться в параметрах


#12

В общем разобрался!
Во первых в форме на фронтенд отсутствовало свойство enctype=“multipart/form-data”, как вы говорили в первом ответе.
Во вторых использовал attach_images.tpl а не fileuploader.tpl, вот так:
{include file=“design/backend/templates/common/attach_images.tpl” image_name=“discussion_image” image_object_type=“discussion” image_object_id=$obj_id image_pair=$obj.main_pair image_type=“M” no_detailed=true hide_titles=true hide_alt=true}
Вот на сколько это правильно, не знаю?!


#13

Это вы на витрине такой путь до файла указали?


#14

НУ да, на витрине! А нельзя так что ли? Всё работает!


#15

Видимо, можно. Спасибо за информацию :slight_smile:


#16

:rofl: Да пожалуйста, не жалко!