Вопрос висит без ответа с прошлого года: как сделать фильтры для Collection в админке MODX?

Всем привет!

Используется компонент Collections для вывода списка ресурсов в админке (разбиение на категории).
Необходимо внутри коллекции добавить фильтрацию по ТВ параметрам ресурсов, т.е. там где в коллекции Поиск по ресурсам, фильтр «Опубликован/нет...», вот там нужен ещё фильтр по определённым, заранее подготовленным ТВ.
Как это можно сделать, есть какой-нибудь мануал? В инете не смог найти ничего.

Продублировал этот вопрос на тостере — пока тишина, но всё равно не понятно как остальные этот вопрос решают? Как управляют десятками тысяч товаров или иным контентом например? Или все делали магазинчики на пять-десять товаров, где в этом просто нет необходимости?
Zoten
21 марта 2018, 08:20
modx.pro
581
0

Комментарии: 4

Алексей Ерохин
21 марта 2018, 12:05
2
+1
Вот вам мануал:
Добавляете в /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, тогда будет она присоединяться сразу к запросу)
    Zoten
    21 марта 2018, 13:47
    0
    Спасибо! Вроде то что нужно!
    Странно что этот функционал сразу не реализовали в Collections!
      Maksim
      16 июня 2020, 12:56
      0
      Добрый день!

      Добавил нужные записи в 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'
      )
      я так понимаю тут без разницы, какие у меня поля в коллекцию добавлены? Есть примеры правильного условия?
        Maksim
        19 июня 2020, 16:35
        0
        Может кому пригодится, вставляется условие следующим образом:

        case '9_sajt-kompanii': 
                        $c->where(array(
                            'TemplateVarResources_tv_portfolioParent.value:LIKE' => '%:9:%',
                        ));
                        break;
        Имя столбца формируется следующим образом:
        TemplateVarResources_tv_[имя-tv-поля]
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4