mfilter2 custom filter по tv с разделителем

Доброго времени суток.

Пытался сделать кастомный фильтр для 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

Прошу помощи
Andrey Frost
21 ноября 2019, 10:30
modx.pro
390
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0