Вопрос висит без ответа с прошлого года: как сделать фильтры для Collection в админке MODX?
Всем привет!
Используется компонент Collections для вывода списка ресурсов в админке (разбиение на категории).
Необходимо внутри коллекции добавить фильтрацию по ТВ параметрам ресурсов, т.е. там где в коллекции Поиск по ресурсам, фильтр «Опубликован/нет...», вот там нужен ещё фильтр по определённым, заранее подготовленным ТВ.
Как это можно сделать, есть какой-нибудь мануал? В инете не смог найти ничего.
Продублировал этот вопрос на тостере — пока тишина, но всё равно не понятно как остальные этот вопрос решают? Как управляют десятками тысяч товаров или иным контентом например? Или все делали магазинчики на пять-десять товаров, где в этом просто нет необходимости?
Используется компонент Collections для вывода списка ресурсов в админке (разбиение на категории).
Необходимо внутри коллекции добавить фильтрацию по ТВ параметрам ресурсов, т.е. там где в коллекции Поиск по ресурсам, фильтр «Опубликован/нет...», вот там нужен ещё фильтр по определённым, заранее подготовленным ТВ.
Как это можно сделать, есть какой-нибудь мануал? В инете не смог найти ничего.
Продублировал этот вопрос на тостере — пока тишина, но всё равно не понятно как остальные этот вопрос решают? Как управляют десятками тысяч товаров или иным контентом например? Или все делали магазинчики на пять-десять товаров, где в этом просто нет необходимости?
Комментарии: 4
Вот вам мануал:
Добавляете в /assets/components/collections/js/mgr/extra/collections.combo.js в collections.combo.FilterStatus store необходимые записи
Дорабатываете процессор /core/components/collections/processors/mgr/resource/getlist.class.php, чтобы он мог фильтровать по TV в функции prepareQueryBeforeCount (в настройках коллекции включать невидимую колонку с этой TV, тогда будет она присоединяться сразу к запросу)
Добавляете в /assets/components/collections/js/mgr/extra/collections.combo.js в collections.combo.FilterStatus store необходимые записи
Дорабатываете процессор /core/components/collections/processors/mgr/resource/getlist.class.php, чтобы он мог фильтровать по TV в функции prepareQueryBeforeCount (в настройках коллекции включать невидимую колонку с этой TV, тогда будет она присоединяться сразу к запросу)
Спасибо! Вроде то что нужно!
Странно что этот функционал сразу не реализовали в Collections!
Странно что этот функционал сразу не реализовали в Collections!
Добрый день!
Добавил нужные записи в collections.combo.FilterStatus, с этим проблем нет, а вот с доработкой процессора чёт затык.
Как правильно добавить tv поле в условие? В коллекцию добавил TV поле «tv_portfolio». Пробую добавлять вариант в функцию prepareQueryBeforeCount в switch:
Добавил нужные записи в collections.combo.FilterStatus, с этим проблем нет, а вот с доработкой процессора чёт затык.
Как правильно добавить tv поле в условие? В коллекцию добавил TV поле «tv_portfolio». Пробую добавлять вариант в функцию prepareQueryBeforeCount в switch:
$filter = $this->getProperty('filter', '');
switch ($filter) {
case 'published':
$c->where(array(
'published' => 1,
'deleted' => 0,
));
break;
case 'unpublished':
$c->where(array(
'published' => 0,
'deleted' => 0,
));
break;
case 'deleted':
$c->where(array(
'deleted' => 1,
));
break;
case '9_sajt-kompanii':
$c->where(array(
'tv_portfolio' => ':9:',
));
break;
...
выдает ошибку:Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'modResource.tv_portfolio' in 'where clause'
)
я так понимаю тут без разницы, какие у меня поля в коллекцию добавлены? Есть примеры правильного условия?
Может кому пригодится, вставляется условие следующим образом:
case '9_sajt-kompanii':
$c->where(array(
'TemplateVarResources_tv_portfolioParent.value:LIKE' => '%:9:%',
));
break;
Имя столбца формируется следующим образом:TemplateVarResources_tv_[имя-tv-поля]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.