Новый фильтр в mfilter2
Нужно создать фильтр который бы проверял наличие в tv поле значения. То есть фильтр должен выглядеть как 1 чекбокс, если по нему кликнуть, то должны выводится ресурсы в которых это поле заполнено, иначе должны выводиться все ресурсы. Есть ли уже готовое такое решение из коробки? Или придется дописывать новый метод в класс фильтрации? Если так то направьте на верный путь.
Комментарии: 7
Обычный фильтр по тв параметру выдаст список всех значений которые встречаются в этом поле. А нужен всего один чекбокс, который бы проверял заполнено поле или нет.
Пробовал. Получается так что выводит 1 чекбокс для первого tv параметра у которого встречается значение. И по клику на этот чекбокс он выводит как раз этот единственный ресурс. То есть он проверяет не наличие какой то записи в тв параметре, а ищет ресурсы у которых этот параметр такой же как у первого ресурса у которого он заполнен.
Ну тогда только писать свой фильтр, по инструкции.
У меня эти вкладки как раз открыты=) Но для начала решил все таки спросить. В любом случае спасибо за ответы!
Если интересно кому будет решение.
Скопировал два метода, как по инструкции. Первый от buildBooleanFilter, а второй от filterNumber и назвал их чтобы фильтр срабатывал на Exist. Собрался копать дальше и о чудо… все заработало.
&tplFilter.row.tv|space__image=`tpl.mFilter2.filter.checkbox`
Копать дальше не пришлось
Скопировал два метода, как по инструкции. Первый от buildBooleanFilter, а второй от filterNumber и назвал их чтобы фильтр срабатывал на Exist. Собрался копать дальше и о чудо… все заработало.
public function buildExistFilter(array $values, $name = '') {
if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
return array();
}
$results = array();
foreach ($values as $value => $ids) {
$title = empty($value) ? $this->modx->lexicon('mse2_filter_boolean_no') : $this->modx->lexicon('mse2_filter_boolean_yes');
$results[$title] = array(
'title' => $title
,'value' => $value
,'type' => 'boolean'
,'resources' => $ids
);
}
ksort($results);
return $results;
}
public function filterExist(array $requested, array $values, array $ids) {
$matched = array();
$min = floor(min($requested));
$max = ceil(max($requested));
$tmp = array_flip($ids);
foreach ($values as $number => $resources) {
if ($number >= $min && $number <= $max) {
foreach ($resources as $id) {
if (isset($tmp[$id])) {
$matched[] = $id;
}
}
}
}
return $matched;
}
&suggestionsRadion=`tv|space__image`&tplFilter.row.tv|space__image=`tpl.mFilter2.filter.checkbox`
Копать дальше не пришлось
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.