Реализация фильтрации в shopModx

Добрый день, нужен совет или точек в каком направлении двигаться. Начал делать фильтры, расширил класс, все роде работает нормально. При реализации фильтрования почему-то работает только с 1 параметром если выбрать 2 уже почему то не очень хочет искать.

Добавил выборку по TV $c->leftJoin('modTemplateVarResource','TVResources', 'TVResources.contentid = Product.resource_id'); $c->leftJoin('modTemplateVar','TemplateVar', 'TVResources.tmplvarid = TemplateVar.id'); ну и само условие where foreach ($tvFilters as $value) { $key = explode("==", $value); $filter['TemplateVar.name'] = $key[0]; $filter['TVResources.value:='] = $key[1]; $c->where($filter); } и так тоже пробовал $filter_array = array(); foreach ($tvFilters as $value) { $key = explode("==", $value); $filter['TemplateVar.name'] = $key[0]; $filter['TVResources.value:='] = $key[1]; $filter_array[] = $filter; } $c->where($filter_array); с 1 значением выводит если выбрать уже 2 TV поля то уже перестает работать. Подскажите в чем у меня ошибка, в каком направлении копать.

Копать в сторону изучения SQL. Не может у тебя одно TV поле называться и 'somename_1' и 'somename_2'. А у тебя при указании двух параметров формируется запрос where tv_name = 'somename_1' AND tv_name = 'somename_2';

Запросы у меня создаются примерно такие WHERE ( ( modResource.deleted = 0 AND modResource.hidemenu = 0 AND modResource.published = 1 )
AND modResource.parent IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191) AND ( ( TemplateVar.name = 'shape' AND TVResources.value = 'rectangle' ) AND ( TemplateVar.name = 'processing_edge' AND TVResources.value = '10' ) ) ) или WHERE ( ( modResource.deleted = 0 AND modResource.hidemenu = 0 AND modResource.published = 1 )
AND modResource.parent IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191) AND ( TemplateVar.name = 'shape' AND TVResources.value = 'rectangle' ) AND ( TemplateVar.name = 'processing_edge' AND TVResources.value = '10' ) ) Каждое поле по отдельности, но не как не вместе

Потому и говорю «учи SQL». Ты не совсем понимаешь принципа работы базы данных. Каждая выбранная строка должна соответствовать всем указанным условиям. Возьми из всех своих строк только одну. Будет ли в ней name равняться сразу и 'shape' и 'processing_edge'? Это физически не возможно. У тебя должно быть примерно так: WHERE ( ( modResource.deleted = 0 AND modResource.hidemenu = 0 AND modResource.published = 1 )
AND modResource.parent IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191) AND ( ( TemplateVar.name = 'shape' AND TVResources.value = 'rectangle' ) OR ( TemplateVar.name = 'processing_edge' AND TVResources.value = '10' ) ) )

ладно а как тогда построить запросто что бы он проверил 2 TV в одном ресурсе,

modxclub.ru/blog/voprosy-spetsyalistov/256.html $alias = $c->getAlias(); $c->innerJoin('modTemplateVarResource', 'tv_shape', "tv_shape.contentid = {$this->classKey}.id AND tv_shape.tmplvarid = $tv_shape_id AND tv_shape.value='rectangle'"); $c->innerJoin('modTemplateVarResource', 'tv_processing_edge', "tv_processing_edge.contentid = {$this->classKey}.id AND tv_processing_edge.tmplvarid = $tv_processing_edge_id AND tv_processing_edge.value='10'");

Николай большое спасибо за помощь, все работает.

Пожалуйста.