Новый фильтр в mfilter2

Нужно создать фильтр который бы проверял наличие в tv поле значения. То есть фильтр должен выглядеть как 1 чекбокс, если по нему кликнуть, то должны выводится ресурсы в которых это поле заполнено, иначе должны выводиться все ресурсы. Есть ли уже готовое такое решение из коробки? Или придется дописывать новый метод в класс фильтрации? Если так то направьте на верный путь.
Владислав
15 мая 2015, 08:09
modx.pro
3
1 802
+1

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

Василий Наумкин
15 мая 2015, 11:35
0
Звучит как совершенно обычный фильтр по ТВ параметру.
&filters=`tv|name`
    Владислав
    15 мая 2015, 11:37
    0
    Обычный фильтр по тв параметру выдаст список всех значений которые встречаются в этом поле. А нужен всего один чекбокс, который бы проверял заполнено поле или нет.
      Василий Наумкин
      15 мая 2015, 11:42
      0
      Фильтр boolean не пробовал? По идее, должен работать.
      &filters=`tv|name:boolean`
        Владислав
        15 мая 2015, 11:46
        0
        Пробовал. Получается так что выводит 1 чекбокс для первого tv параметра у которого встречается значение. И по клику на этот чекбокс он выводит как раз этот единственный ресурс. То есть он проверяет не наличие какой то записи в тв параметре, а ищет ресурсы у которых этот параметр такой же как у первого ресурса у которого он заполнен.
            Владислав
            15 мая 2015, 12:30
            0
            У меня эти вкладки как раз открыты=) Но для начала решил все таки спросить. В любом случае спасибо за ответы!
              Владислав
              15 мая 2015, 13:26
              1
              +3
              Если интересно кому будет решение.

              Скопировал два метода, как по инструкции. Первый от 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`

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