1 Отредактировано Алексей (27.12.2016 01:44:02)

Тема: Как получить список складов в админке

Добрый день,
Хочу написать модуль который будет скриптом проходить по любой странице магазина и в зависимости от категории убирать из вёрстки определённые склады.
Сам скрипт уже есть и работает, но теперь хочу прикрутить к нему управление из админки.
Как добавлять вкладки категориям разобрался (спасибо роликам Александра), но теперь неясно как в одну из вкладок вывести список всех складов с их id.

Подскажите пожалуйста.
Спасибо

PS: в идеале, конечно, нужен функционал отображения складов для категорий, но, я так понимаю, такой функционал не планируется.

Повысить оценку Понизить оценку

Re: Как получить список складов в админке

Вы можете вызвать метод API staticSelectList он есть в любом апи которое нужно. В данном случае
\Catalog\Model\WarehouseApi.
Например в ORM объекте

'warehouse_id' => new Type\Integer(array(
                    'description' => t('Склад'),
                    'list' => array(array('\Catalog\Model\WarehouseApi', 'staticSelectList')))
                ))

Re: Как получить список складов в админке

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

при переоткрытии окна должно читаться поле из базы и соответствующие чекбоксы должны проставляться включёнными.

ну это мне так видится, но я думаю вы можете подсказать способ получше, если он есть.

Повысить оценку Понизить оценку

4 Отредактировано Закусило Александр (27.12.2016 17:54:02)

Re: Как получить список складов в админке

Можно конечно.
Нужно, чтобы вместо Вашего поля выдавался какой либо шаблон с нужной логикой, где при помощи static_call вы подгрузите склады.
У Вас будет 2 поля. Одно показывает шаблон, а второе скрытое, которое обрабатывается на 2-х хуках:
orm.afterload.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА - для того, чтобы получить список из подгруженного объекта
orm.afterwrite.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА - для того, чтобы сохранить список.
Где в отдельную таблицу сохраняется связь Ваш ORM объект-id склада

Например:

'warehouse_ids_arr' => new Type\ArrayList(array(
       'description' => t('Массив складов'),
       'template' => '%имяпапкимодуля%/forms/warehouses/warehouses.tpl'
)),
'warehouse_ids' => new Type\ArrayList(array(
       'description' => t('Склады сериализованное поле'),
       'visible' => false
)),

В шаблоне через static_call загружаем список.

{static_call var=mylist callback=['\Catalog\Model\WarehouseApi', 'staticSelectList']}

В этом же шаблону нужно будет вывести галочки и проверить отмеченные в поле warehouse_ids_arr.

В afterwrite хуке собираем галочки:

$orm['warehouse_ids'] = @serialize($orm['warehouse_ids_arr']);

В beforewrite хуке получаем отмеченные после сохранения:

$orm['warehouse_ids_arr'] = @unserialize($orm['warehouse_ids']);