Вопрос по mFilter2. Фильтрация кастомных таблиц
Не получается подключить фильтрацию ресурсов из своих обьектов. Везде в документации используются либо modResource, либо msProducts, вкупе с miniShop. Мне нужно всего навсего подключить фильтрацию по своему полю своих xpdo обьектов.
в логе следующие ошибки
Нигде не видел мануала по подключению mFilter к своим таблицам. Подскажите плз куда копать.
[[!mFilter2?
&loadModels=`thailand_phuket_rent`
&class=`ThailandPhuketRent`
&element=`pdoResources`
&tpl=`catalog_villa_tpl`
&where=`{"resource_id":"[[*id]]"}`
&filters=`
phuketrent|bedroom:default
`
&showLog=`1`
]]Унаследовался от класса обработчика фильтра, и прописал метод получения моих объектовclass customFilter extends mse2FiltersHandler {
/**
* Retrieves values from ThailandPhuketRent table
*
* @param array $fields Names of resource fields
* @param array $ids Ids of needed resources
*
* @return array Array with resource fields as keys and resources ids as values
*/
public function getPhuketRentValues(array $fields, array $ids) {
$filters = array();
$no_id = false;
if (!in_array('id', $fields)) {
$fields[] = 'id';
$no_id = true;
}
$q = $this->modx->newQuery('ThailandPhuketRent');
$q->select(implode(',', $fields));
$q->where(array('ThailandPhuketRent.id:IN' => $ids));
$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
$this->modx->queryTime += microtime(true) - $tstart;
$this->modx->executedQueries++;
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
foreach ($row as $k => $v) {
$v = trim($v);
if ($k == 'category_id') {
if ($row['parent'] == $v) {continue;}
else {$k = 'parent';}
}
if ($v == '' || ($k == 'id' && $no_id)) {
continue;
}
elseif (isset($filters[$k][$v])) {
$filters[$k][$v][] = $row['id'];
}
else {
$filters[$k][$v] = array($row['id']);
}
}
}
}
else {
$this->modx->log(modX::LOG_LEVEL_ERROR, "[mSearch2] Error on get filter params.\nQuery: ".$q->toSql()."\nResponse: ".print_r($q->stmt->errorInfo(),1));
}
return $filters;
}Обьекты выводятся, фильтр выводится, при фильтрации список перезагружается но фильтр не применяется.в логе следующие ошибки
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) Could not load class: ThailandPhuketRent from mysql.thailandphuketrent.
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) No class specified for loadClass
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) Could not load class
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) No class specified for loadClass
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) Could not load class !
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) No class specified for loadClass
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) No class specified for loadClass
[2015-03-13 00:02:31] (ERROR @ /assets/components/msearch2/action.php) [mSearch2] Error on get filter params.
Query: SELECT `bedroom`, `id` FROM WHERE `ThailandPhuketRent`.`id` IN ('163','219','217','215','213','211','209','207','205','221','223','239','237','235','233','231','229','227','225','203','201','179','177','175','173','171','169','167','165','181','183','199','197','195','193','191','189','187','185','241','243','299','297','295','293','291','289','287','285','301','303','319','317','315','313','311','309','307','305','283','281','259','257','255','253','251','249','247','245','261','263','279','277','275','273','271','269','267','265','321','161','1','57','55','53','51','49','47','45','43','59','61','77','75','73','71','69','67','65','63','41','39','17','15','13','11','9','7','5','3','19','21','37','35','33','31','29','27','25','23','79','81','137','135','133','131','129','127','125','123','139','141','157','155','153','151','149','147','145','143','121','119','97','95','93','91','89','87','85','83','99','101','117','115','113','111','109','107','105','103','159')
Response: Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `ThailandPhuketRent`.`id` IN ('163','219','217','215','213','211','209','20' at line 1
)Где то не определен класс, но почему не пойму.Нигде не видел мануала по подключению mFilter к своим таблицам. Подскажите плз куда копать.
Комментарии: 10
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Что ещё нужно было для реализации?
уже не помню почему но нужно писать обертку для pdoResources, в моем случае написал сниппет
thaiPdoResources
Вот такого вида.
И вызывать вот так mFilter2
пробуйте, отпишитесь
Если не поможет поищу еще…
Обёртка помогла для правильной фильтрации результатов — правда ещё не разобрался почему так долго зависает, строк в таблице 10 штук тестовых, а фильтрует как будто там 10 тысяч…
В своем обработчике фильтра надо вручную загрузить модели классов, иначе modx просто не может их найти
пропишите в конструкторе фильтра вызовы для своих моделей addPackage(tablename, model_path).
Вот пример как у меня:
Может быть можно в другом месте эти зависимости загрузить, но я сделал так.
После этого modx будет знать как общаться с вашей таблицей.
Да и эти наши комментарии — они же часть документации, которая пишется нами в дополнение к стандартной — будет откуда вспомнить если снова нужно будет делать когда-то, или другим кто только начинает…