mfilter -фильтрация из своей таблицы?

Доброго дня сообщество. Уже который раз изобретаю велосипеды с фильтрацией данных, и который раз смотрю в сторону такого замечательного компонента как mfilter. Суть в чем, как правило моя работа не выходит за рамки создания некой таблицы, с данными. И вывод этих данных на какой то странице, обычным сниппетом, используя не менее обычный PDO. А есть ли способ заставить mfilter выбирать и фильтровать данные? Так, как будто это были бы ресурсы. Или же проще данные складывать не в собственно созданные таблички, а в site_content?
Николай
20 марта 2015, 11:38
modx.pro
1
1 271
0

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

Василий Наумкин
20 марта 2015, 14:40
0
Можно фильтровать что угодно.
    Николай
    03 апреля 2015, 13:40
    0
    С 3го подхода я пытаюсь усвоить информацию, и написать свои методы фильтрации. Делая фильтрацию по обычным ресурсам, мы в вызове mFilter пишем &parents=`30`. Делая свою фильтрацию, получается подобные параметры мне не нужны? Я просто пишу свой get*Values в котором выбираю данные так как мне нужно? А если я хотел бы передать из вызова mFilter что то, например &type=`1`, то как получить доступ в классе к параметру? Или я не так все понял?
      Василий Наумкин
      03 апреля 2015, 14:41
      0
      Эти параметры передаются в вызываемый сниппет, а он возвращает id подходящих ресурсов, которые ты дальше видишь почти во всех методах.

      Получить эти параметры в классе фильтрации можно через $this->config, например:
      $this->config['parents'];
      Николай
      03 апреля 2015, 13:42
      0
      К слову, getResourceValues получает ресурсы по массиву $ids, но в вызове указывается &parents=`30`. Где то есть функция прослойка, которая обрабатывает параметры вызова, и передает их в класс?
        Николай
        03 апреля 2015, 14:23
        0
        И такой момент. Выборка данных и отправка в чанк как осуществляется? У нас есть 3 метода:
        1. Получение информации для фильтрации.
        Array (
            [ИмяПоля 1] => array(
                [Значение1] => array(
                    [0] => id подходящего ресурса
                    [1] => id подходящего ресурса
                    [2] => id подходящего ресурса
                ),
            ),
        )
        2. Приготовление фильтров для вывода
        Array (
            [ИмяФильтра] => Array (
                [title] => ИмяФильтра
                [value] => значение позиции фильтра
                [type] => необязательное поле с типом фильтра
                [resources] => Array (
                    [0] => id подходящего ресурса
                    [1] => id подходящего ресурса
                    [2] => id подходящего ресурса
                )
            )
        )
        3. проведение фильтрации по параметру
        Его можно не переопределять, как я понял. Метод default произведет фильтрацию.
        Но что из всего этого выведет данные из базы? На всех 3 методах максимум что мы знаем о выводимых данных — id, но нигде нету вывода данных и отправки в чанк.
          Василий Наумкин
          03 апреля 2015, 14:42
          +1
          Выводом данных занимается сниппет, указанный в &element.

          По умолчанию там mSearch2, но часто используются pdoResources или msProducts.
            Николай
            03 апреля 2015, 14:52
            0
            Получается я указываю свой сниппет в element, а в нем делаю return $modx->getChunk(); с данными. Тогда наверное последний вопрос, а в моем сниппете, мне как и какие данные ждать? Я ранее пытался из сниппета передавать массив в сниппет, но не получалось. Общался через json.
              Василий Наумкин
              03 апреля 2015, 15:13
              0
              Используй pdoResources — он умеет выбирать данные из любых таблиц.
                Николай
                03 апреля 2015, 15:22
                0
                Внимательно перечитал информацию и не смог найти ничего, что указывало бы на возможность вывода информации из собственных таблиц. Нужно же как то ему сказать, что данные для выборки находятся в таблице user_pages.
                Фактический должно получиться что то вроде этого?
                [[!mFilter2? 
                    &tpls=`tpl.page` 
                    &filters=`pages|status`
                    &element=`pdoResources`
                /// тут какой то параметр, для pdoResourses явно указывающий табличку user_pages
                ]]
                  Василий Наумкин
                  03 апреля 2015, 15:41
                  0
                  docs.modx.pro/components/pdotools/general-settings — параметры &class и &loadModels
                    Николай
                    03 апреля 2015, 15:44
                    0
                    Кажется я осознаю свою ошибку. Я не полностью предоставил информацию. В моем случае имеется табличка user_pages, которая буквально 2-3 строчками PDO запросов из обычного сниппета наполняется. Соответственно у меня нету своих моделей и классов. Без этого у меня не выйдет делать фильтрацию?
                      Василий Наумкин
                      03 апреля 2015, 15:49
                      +1
                      Через pdoTools — не выйдет.

                      Тогда нужно писать свой сниппет, наверное, который будет корректно реагировать на передаваемые из mFilter2 параметры, типа sortby, parents, returnIds и еще не знаю какие — нужно смотреть исходник.

                      Например, там есть вот такие места:
                      if (!empty($ids)) {
                      	$tmp = $scriptProperties;
                      	$tmp['returnIds'] = 1;
                      	$tmp['resources'] = implode(',', $ids);
                      	$tmp['parents'] = $scriptProperties['parents'];
                      	$tmp['limit'] = 0;
                      	$ids = explode(',', $modx->runSnippet($scriptProperties['element'], $tmp));
                      	$pdoFetch->addTime('Found ids: "'.implode(',',$ids).'"');
                      }
                      Это проверка ресурсов, которые сниппет может вывести.

                      Наверное, проще будет создать свою модель как положено.
                        Николай
                        03 апреля 2015, 16:32
                        0
                        Спасибо! В какую сторону копать я допер.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        13