вобщем выкрутился.
в код getResource, после обработки tvFilters, где-то 187 строка, нужно добавить такой код:
if($tvFilterComplex)
{
$tmplVarTbl = $modx->getTableName('modTemplateVar');
$tmplVarResourceTbl = $modx->getTableName('modTemplateVarResource');
$conditions = array();
$filters = explode("||", $tvFilterComplex);
foreach($filters as $filter)
{
list($tv_name, $tv_values) = explode("==", $filter);
$tv_vals = explode(",", $tv_values);
$arr = array();
foreach ($tv_vals as $tv_val) $arr[] = "`tvr`.`value` LIKE '{$tv_val}'";
$part = implode(" OR ", $arr);
$conditions[][] = "EXISTS (SELECT 1 FROM {$tmplVarResourceTbl} `tvr` JOIN {$tmplVarTbl} `tv` ON ({$part}) AND `tv`.`name` = '{$tv_name}' AND `tv`.`id` = `tvr`.`tmplvarid` WHERE `tvr`.`contentid` = `modResource`.`id`)";
}
if (!empty($conditions)) {
foreach ($conditions as $cGroup => $c) {
$criteria->andCondition($c);
}
}
}
использовать такой параметр можно так:
[[!getResource? &tvFilterComplex=`Размер==1,4||Цвет==2,3`]]
выборка будет по тем документам у которых тв Размер равен 1 или 4, и тв Цвет равен 2 или 3.
делал я эту штуку для фильтрации по типа яндекс маркета.
надеюсь кому-то пригодится.