[mFilter2] Показывать только главные категории
У меня такая структура каталога:
Копался в документации — так и не нашел как сделать.
Заранее спасибо!
Низкорамные
- Двухосные
- Трехосные
Высокорамные
- Двухосные
- Односкатные
- Двускатные
- Трехосные
...
А фильтровать нужно только по главным категориям: Низкорамные, Высокорамные…Копался в документации — так и не нашел как сделать.
Заранее спасибо!
Комментарии: 4
Grandparents не подходит — уровень вложенности разный…
Где то нужен дедушка, а где то прадедушка.
Где то нужен дедушка, а где то прадедушка.
И? Дополнение должно волшебным образом само угадывать, что тебе нужно?
Пиши свой фильтр со своей логикой. Больше ничего не могу предложить.
Пиши свой фильтр со своей логикой. Больше ничего не могу предложить.
Решил такую же проблему по выводу прадедушек резиновым костылем в файле 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);
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.