[mFilter2] Показывать только главные категории

У меня такая структура каталога:
Низкорамные
 - Двухосные
 - Трехосные
Высокорамные
 - Двухосные
   - Односкатные
   - Двускатные
 - Трехосные
...
А фильтровать нужно только по главным категориям: Низкорамные, Высокорамные…
Копался в документации — так и не нашел как сделать.

Заранее спасибо!
Игорь Терентьев
18 декабря 2014, 10:31
modx.pro
1
1 210
0

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

Николай Загумённов
06 июня 2015, 19:56
0
Решил такую же проблему по выводу прадедушек резиновым костылем в файле filter.class.php добавил:
public function buildGrandParentslvl2Filter(array $values, $name = '', $filter = false) {
		if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
			return array();
		}
		$gp_array_id = array_keys($values);
		$grandparents = array();
		$q = $this->modx->newQuery('modResource', array('id:IN' => array_keys($values), 'published' => 1));
		$q->select('id,parent');
		$tstart = microtime(true);
		if ($q->prepare() && $q->stmt->execute()) {
			$this->modx->queryTime += microtime(true) - $tstart;
			$this->modx->executedQueries++;
			while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
				$grandparents[$row['id']] = $row['parent'];
			}
		}

		$tmp = array();
		foreach ($values as $k => $v) {
			if (isset($grandparents[$k]) && $grandparents[$k] != 0) {
				$parent = $grandparents[$k];
				if (!isset($tmp[$parent])) {
					$tmp[$parent] = $v;
				}
				else {
					$tmp[$parent] = array_merge($tmp[$parent], $v);
				}
			}
			else {
				$tmp[$k] = $v;
			}
		}
		$values = $tmp;
		$tmp = array();
		$q = $this->modx->newQuery('modResource', array('id:IN' => array_keys($values), 'published' => 1));
		$q->select('id,parent');
		$tstart = microtime(true);
		if ($q->prepare() && $q->stmt->execute()) {
			$this->modx->queryTime += microtime(true) - $tstart;
			$this->modx->executedQueries++;
			while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
				$grandparents[$row['id']] = $row['parent'];
			}
		}
		foreach ($values as $k => $v) {
			if (isset($grandparents[$k]) && $grandparents[$k] != 0) {
				$parent = $grandparents[$k];
				if (!isset($tmp[$parent])) {
					$tmp[$parent] = $v;
				}
				else {
					$tmp[$parent] = array_merge($tmp[$parent], $v);
				}
			}
			else {
				$tmp[$k] = $v;
			}
		}
		//print_r($tmp); die();
		return $filter
			? $tmp
			: $this->buildParentsFilter($tmp, $name, 0);
	}

	public function filterGrandParentslvl2(array $requested, array $values, array $ids) {
		$values = $this->buildGrandParentslvl2Filter($values, '', true);

		return $this->filterDefault($requested, $values, $ids);
	}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4