[EVO] Вывод через Autofilter документов с определенным значением TV в любом случае.

Всем привет. Проблема такова. Реализована фильтрация товара по нескольким TV средствами Autofilter v0.8a. Есть TV [*color*]. Возможные значения: красный, белый, черный… «на выбор». Нужно, чтобы при установке в фильтре любого цвета, также выводился товар со значением «на выбор».

Это форма фильтрации:

<form name="af" method="get" action="">
	<input type="hidden" name="afid" value="[+af.id+]" />
	<label>Пол: [+af.opt24_select+]</label>
	
	<label>Цвет: [+af.opt25_select+]</label>
	
	<label>Ценовая категория: [+af.opt26_select+]</label>
	
	<label>Бренд: [+af.opt31_select+]</label>
	
	<input style="" type="submit" name="go" value="Применить">
	<input style="" type="submit" name="Reset" value="Сбросить" />
</form>

Это вызов Ditto:

[[Ditto? documents=`[+af.items+]` &depth=`1` &tpl=`products_list` &paginate=`1` &display=`45` &sortBy=`menuindex` &sortDir=`ASC` &noResults=`Документы не найдены`]]

Полагаю, нужно создавать свои функции обработки фильтров, но в php не силен. Подскажите, что делать, в каком направлении копать?

1 комментарий

avatar
Решение подсказал один замечательный человек. Можно было написать и свой фильтр, но такое решение на мой взгляд, проще.
В файле assets/snippets/autoFilter/functions/formFunctions.inc.php со строки 163 начинается условие, изменяем в его теле несколько строчек. В итоге получается:

if (!function_exists('select_filter')) {
  function select_filter(&$opt, $optId, $filterVal) {
    $retIdsAr = array();

    //если в значении массив, берем первый элемент
    $filterVal = fToArray($filterVal);
    $filterVal = $filterVal[0];

    //выбираем значения опции и сопоставленные документы
    if (is_array($opt->map[$optId])) {
	$this_wanderful_array_97987987 = $opt->map[$optId]['на выбор'];
        foreach ($opt->map[$optId] as $optVal => $docsAr) {
            if ($optVal == $filterVal) {
                $retIdsAr = array_merge($retIdsAr, $docsAr);
                break;
            }
        }
	if(is_array($this_wanderful_array_97987987))
	    $retIdsAr = array_merge($retIdsAr, $this_wanderful_array_97987987);
    }		
    return $retIdsAr;
  }
}


$this_wanderful_array_97987987 — новая массив, в который записываются все id товаров со значением параметра color='на выбор'. Результат
Комментарий отредактирован 2014-09-13 12:10:42 пользователем katehizis
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.