mfilter2 custom filter по tv с разделителем
Доброго времени суток.
Пытался сделать кастомный фильтр для mfilter2, можно сказать почти удалось, но столкнулся с проблемой, при фильтрации по одному тв полю — все работает, если по нескольким уже нет.
Всего полей 10 в них содержатся значения в таком виде: 0|1|2 и т.д.
https://yadi.sk/i/AU8706AxkYLZzQ
Прошу помощи
Пытался сделать кастомный фильтр для mfilter2, можно сказать почти удалось, но столкнулся с проблемой, при фильтрации по одному тв полю — все работает, если по нескольким уже нет.
Всего полей 10 в них содержатся значения в таком виде: 0|1|2 и т.д.
<?php
class myCustomFilter extends mse2FiltersHandler {
public function buildQstFilter(array $values) {
if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
return array();
}
$tmp = $values;
$values = array();
foreach ($tmp as $k => $v) {
$tmp = explode('|', $k);
foreach ($tmp as $k => $v) {
$values[$v] = array(
$v => $v
);
}
}
$results = array();
foreach ($values as $value => $ids) {
$title = $value;
if (!isset($results[$value])) {
$results[$value] = array(
'title' => $title
,'value' => $value
,'type' => 'price'
,'resource' => array()
);
}
foreach ($ids as $id) {
$results[$value]['resources'][] = $id;
}
}
ksort($results);
return $results;
}
public function filterQst(array $requested, array $values, array $ids) {
$matched = array();
//$values = Array ( [7] => Array ( [890] => 890 ) [2|7] => Array ( [1530] => 1530 ) )
//$value = 2
$value = $requested[0];
$tmp = array_flip($ids);
foreach ($values as $answ_id => $id) {
$answ = explode('|', $answ_id);
if(in_array($value, $answ)) {
foreach ($id as $k => $v) {
$matched[] = $v;
}
}
}
return $matched;
}
}
В шаблоне{'!mFilter2'|snippet:[
'aliases' => '
tv|qst_9==qst_9,
tv|qst_10==qst_10,
tv|qst_11==qst_11,
tv|qst_12==qst_12,
tv|qst_13==qst_13,
tv|qst_14==qst_14,
tv|qst_15==qst_15,
tv|qst_16==qst_16,
tv|qst_18==qst_18,
tv|region==region,
ms|price==price,
resource|parent==category
',
'filters' => '
tv|qst_9:qst,
tv|qst_10:qst,
tv|qst_11:qst,
tv|qst_12:qst,
tv|qst_13:qst,
tv|qst_14:qst,
tv|qst_15:qst,
tv|qst_16:qst,
tv|qst_18:qst,
tv|region:qst,
ms|price:number,
resource|parent:parents
',
'parents' => 7,
'limit' => 12,
'element' => 'msProducts',
'sortby' => 'RAND()',
'class' => 'msProduct',
'includeContent' => 1,
'includeTVs' => 'filials,img,qst_9,qst_10,qst_11,qst_12,qst_13,qst_14,qst_15,qst_16,qst_18,region',
'tplOuter' => 'PODBORKA.mFilter2.outer',
'tplFilter.outer.default' => 'mFilter2.filter.outer',
'tplFilter.row.default' => 'mFilter2.filter.checkbox',
'tplFilter.outer.price' => 'tpl.mFilter2.filter.slider',
'tplFilter.row.price' => 'tpl.mFilter2.filter.number',
'tpls' => 'CATALOG.item.tpl',
'hideContainers' => 1,
'showEmptyFilters' => 1,
'suggestions' => 0,
'ajaxMode' => 'default'
]}
Сами поля:https://yadi.sk/i/AU8706AxkYLZzQ
Прошу помощи