Что делать, если нужно добавить фильтрацию по собственным полям в административной панели? Ответ вы найдете в данной статье.
Реализовывать данную задачу мы будем из нашего кастомного модуля ModuleName. Как обычно исходим из того, что простейший модуль создан и установлен в вашем магазине.
Предположим, у нашего товара есть несколько произвольных полей, созданных в стороннем модуле с помощтю обработки события orm.init.catalog-product.
Файл config/handlers.inc.php
<?php
namespace ModuleName\Config;
use \RS\Orm\Type;
{
function init()
{
$this->bind('orm.init.catalog-product');
}
public static function ormInitCatalogProduct(\Catalog\Model\Orm\Product $product)
{
$product->getPropertyIterator()->append(array(
t('Произвольные поля'),
'custom_date' => new Type\Datetime(array(
'description' => t('Произвольное поле - дата и время')
)),
'custom_string' => new Type\Varchar(array(
'description' => t('Произвольное поле - строка')
)),
'custom_integer' => new Type\Integer(array(
'description' => t('Произвольное поле - число')
)),
'custom_list' => new Type\Enum(array(
'value1',
'value2',
'value3'
), array(
'description' => t('Произвольное поле - список'),
'listFromArray' => array(array(
'value1' => 'Значение 1',
'value2' => 'Значение 2',
'value3' => 'Значение 3'
))
))
));
}
}
В дминистративной панели это будет выглядеть так:
Поля, добавленные к товару через сторонний модуль
Важно: После изменения состава полей ORM Объекта, необходимо сбросить кэш и перейти в раздел Управление -> Настройка системы и нажать на ссылку справа "Исправить структуру БД".
Далее, нам необходимо получить объект визуального помощника CrudCollection контроллера Catalog::Controller::Admin::Ctrl, чтобы откорректировать поля фильтра. Делаем это с помощью перехвата события controller.exec.catalog-admin-ctrl.index.
<?php
namespace ModuleName\Config;
use \RS\Orm\Type;
{
function init()
{
$this
->
bind(
'orm.init.catalog-product')
->bind('controller.exec.catalog-admin-ctrl.index');
}
public static function controllerExecCatalogAdminCtrlIndex(\RS\Controller\Admin\Helper\CrudCollection $helper)
{
$filter_date = new \RS\Html\Filter\Type\DateRange('custom_date', t('Фильтр по дате'));
$filter_string = new \RS\Html\Filter\Type\DateRange('custom_string', t('Фильтр по строке'));
$filter_integer = new \RS\Html\Filter\Type\Text('custom_integer', t('Фильтр по числу'));
$filter_integer->setShowType();
$filter_list = new \RS\Html\Filter\Type\Select('custom_list', t('Фильтр по списку'), array(
'' => t('Не выбрано'),
'value1' => 'Значение 1',
'value2' => 'Значение 2',
'value3' => 'Значение 3'
));
$line = new \RS\Html\Filter\Line();
$line->addItem($filter_date);
$line->addItem($filter_string);
$line->addItem($filter_integer);
$line->addItem($filter_list);
$helper
->getFilter()
->getContainer()
->addLine($line);
$helper->getFilter()->getContainer()->cleanItemsCache();
$helper->getFilter()->fill();
}
public static function ormInitCatalogProduct(\Catalog\Model\Orm\Product $product)
{
}
}
После корректировки состава полей для фильтрации необходимо очистить кэш и посмотреть на результат в административной панели.
Добавленные в фильтр поля