mfilter -фильтрация из своей таблицы?
Доброго дня сообщество. Уже который раз изобретаю велосипеды с фильтрацией данных, и который раз смотрю в сторону такого замечательного компонента как mfilter. Суть в чем, как правило моя работа не выходит за рамки создания некой таблицы, с данными. И вывод этих данных на какой то странице, обычным сниппетом, используя не менее обычный PDO. А есть ли способ заставить mfilter выбирать и фильтровать данные? Так, как будто это были бы ресурсы. Или же проще данные складывать не в собственно созданные таблички, а в site_content?
Комментарии: 13
Можно фильтровать что угодно.
С 3го подхода я пытаюсь усвоить информацию, и написать свои методы фильтрации. Делая фильтрацию по обычным ресурсам, мы в вызове mFilter пишем &parents=`30`. Делая свою фильтрацию, получается подобные параметры мне не нужны? Я просто пишу свой get*Values в котором выбираю данные так как мне нужно? А если я хотел бы передать из вызова mFilter что то, например &type=`1`, то как получить доступ в классе к параметру? Или я не так все понял?
Эти параметры передаются в вызываемый сниппет, а он возвращает id подходящих ресурсов, которые ты дальше видишь почти во всех методах.
Получить эти параметры в классе фильтрации можно через $this->config, например:
Получить эти параметры в классе фильтрации можно через $this->config, например:
$this->config['parents'];
К слову, getResourceValues получает ресурсы по массиву $ids, но в вызове указывается &parents=`30`. Где то есть функция прослойка, которая обрабатывает параметры вызова, и передает их в класс?
И такой момент. Выборка данных и отправка в чанк как осуществляется? У нас есть 3 метода:
1. Получение информации для фильтрации.
Его можно не переопределять, как я понял. Метод default произведет фильтрацию.
Но что из всего этого выведет данные из базы? На всех 3 методах максимум что мы знаем о выводимых данных — id, но нигде нету вывода данных и отправки в чанк.
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, но нигде нету вывода данных и отправки в чанк.
Выводом данных занимается сниппет, указанный в &element.
По умолчанию там mSearch2, но часто используются pdoResources или msProducts.
По умолчанию там mSearch2, но часто используются pdoResources или msProducts.
Получается я указываю свой сниппет в element, а в нем делаю return $modx->getChunk(); с данными. Тогда наверное последний вопрос, а в моем сниппете, мне как и какие данные ждать? Я ранее пытался из сниппета передавать массив в сниппет, но не получалось. Общался через json.
Используй pdoResources — он умеет выбирать данные из любых таблиц.
Внимательно перечитал информацию и не смог найти ничего, что указывало бы на возможность вывода информации из собственных таблиц. Нужно же как то ему сказать, что данные для выборки находятся в таблице user_pages.
Фактический должно получиться что то вроде этого?
Фактический должно получиться что то вроде этого?
[[!mFilter2?
&tpls=`tpl.page`
&filters=`pages|status`
&element=`pdoResources`
/// тут какой то параметр, для pdoResourses явно указывающий табличку user_pages
]]
docs.modx.pro/components/pdotools/general-settings — параметры &class и &loadModels
Кажется я осознаю свою ошибку. Я не полностью предоставил информацию. В моем случае имеется табличка user_pages, которая буквально 2-3 строчками PDO запросов из обычного сниппета наполняется. Соответственно у меня нету своих моделей и классов. Без этого у меня не выйдет делать фильтрацию?
Через pdoTools — не выйдет.
Тогда нужно писать свой сниппет, наверное, который будет корректно реагировать на передаваемые из mFilter2 параметры, типа sortby, parents, returnIds и еще не знаю какие — нужно смотреть исходник.
Например, там есть вот такие места:
Наверное, проще будет создать свою модель как положено.
Тогда нужно писать свой сниппет, наверное, который будет корректно реагировать на передаваемые из 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).'"');
}
Это проверка ресурсов, которые сниппет может вывести.Наверное, проще будет создать свою модель как положено.
Спасибо! В какую сторону копать я допер.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.