Как добавить пунктам меню иконку?

Хочу доработать пункты главного меню. Иметь возможность категориям, которым я захочу, добавлять иконки.

Что я уже сделал:

  1. Создал модуль module_name
  2. В папке шаблонов админки создал хуки:
    /design/backend/templates/addons/module_name/hooks/static_data/tabs_content.pre.tpl
    /design/backend/templates/addons/module_name/hooks/static_data/tabs_list.pre.tpl

Теперь в админке, в popup’e редактирования пунктам меню появилась вкладка “Иконка”. И в ней поле загрузки картинки.

Файл tabs_content.pre.tpl содержит такой код:

    {include
      file="common/attach_images.tpl"
      image_name="menu_icon"
      image_object_type="menu_icon"
      image_pair=$static_data.menu_icon
      no_detailed="Y"
      hide_titles="Y"
      image_key=$id
      image_object_id=$id
    }

Но вот с сохранением данных в базу у меня проблема. Правильно я понимаю что я должен создать в таблице static_data дополнительную колонку и записывать туда id загруженного изображения? Только вот как мне убедится что изображение загрузилось на сервер?

Направьте пожалуйста.

(В документации cs-cart используется пример по записи в БД текстового поля. С этим проблем нет. А вот с файлом сложности)

https://www.cs-cart.ru/docs/4.6.x/developer_guide/core/images_subsystem.html

1 лайк

Честно говоря так и не получилось разобраться.
Застрял в первом же предложении :smiley:

Чтобы добавить картинки к некоему объекту (пусть он будет называться “mod”) без создания новых таблиц связей и хранения, необходимо: 

Что в cs-cart является объектом? В моем случае это пункт меню? Или само меню? О чем речь?

Может быть есть в cs-cart уже подобный блок где подобным образом добавляется картинка? Я бы посмотрел конкретный пример и может быть тогда понял :smiley:

Еще меня смущает то, что в контроллере /var/www/html/theme_name/app/controllers/backend/static_data.php, в mod=“update” уже есть некий код работы с иконкой:

if (!empty($section_data['icon'])) {
    $static_data['icon'] = fn_get_image_pairs($static_data['param_id'], $section_data['icon']['type'], 'M', true, true, DESCR_SL);
}

Сделайте проще

расширьте схему аpp/schemas/static_data/schema.php, добавив для меню

'icon' => array(
    'type' => 'menu_item',
    'title' => __('icon')
)

Точно не помню. Вроде должно быть достаточно

1 лайк

Спасибо, получилось!

В шаблоне я получил массив таким образом:

{assign var="menu_icon" value=$item.param_id|fn_get_image_pairs:'menu_item':'M':true:true}

И вывел вот так:

{include
    file="common/image.tpl"
    obj_id=$menu_icon.image_id
    images=$menu_icon.icon
    image_width=24
    image_height=24
}
1 лайк