Автоматический вывод всех свойств категории в mFilter2
Небольшой сниппет обёртка для mFilter2 который автоматически выводит все свойства с возможностью исключать определенные.
Сниппет в случае, если документ находится в корне сайта (Это значит верхний каталог), добавляет к фильтрации вывод категорий и выбирает все свойства кроме тех у которых категории (папки) не те, что мы указали в качестве значения параметра hiddenCategories, иначе он выводит те свойства которые назначены только текущей категории товаров.
На счёт цикла MIGX: Если кто ждал или ждет, извините, времени нет даже голову почесать. Есть пара материалов и как будет время буду публиковать.
Кстати: тут Сергей Шлоков спросил аксакал он или нет, отвечу тут:
☕ Угостить чашкой кофе
Как пользоваться:
- Создаем сниппет, называем его, например: mFilter3
- Создаем категорию (папку, чтобы не было путаницы), называем его, например: Не участвует в фильтрации, запоминаем его ID
- Помещаем все свойства которые не должны участвовать в фильтрации в данную категорию
Вызов:
// MODX
[[mFilter3?
&filters=` // Указываем дефолтные фильтры для всех категорий
ms|price:number,
ms|vendor:vendors,
msoption|size,
msoption|color
`
&hiddenCategories=`61` // Тут указываем ID категории, можно несколько через запятую
]]
// Fenom, я пользуюсь файловыми сниппетами, потому и вызываю из файла
{'@FILE snippets/snippet.mfilter.php' | snippet : [
'filters' => ' // Указываем дефолтные фильтры для всех категорий
ms|price:number,
ms|vendor:vendors,
msoption|size,
msoption|color
',
'hiddenCategories' => 61, // Тут указываем ID категории, можно несколько через запятую
]}
Код сниппета:
<?php
$id = $modx->resource->id;
$opKey = 'msOption';
$copKey = 'msCategoryOption';
$hiddenCategories = explode(',', $scriptProperties['hiddenCategories']);
$filters = explode(',', $scriptProperties['filters']);
if($modx->resource->parent == 0) {
array_unshift($filters, 'resource|parent:categories');
$q = $modx->newQuery($opKey);
$q->select(array("{$opKey}.key"));
} else {
$q = $modx->newQuery($copKey);
$q->select(array(
"{$copKey}.category_id",
"{$copKey}.option_id",
"{$opKey}.key"
));
$q->where(array("{$copKey}.category_id" => $id));
$q->leftJoin($opKey, $opKey, "{$copKey}.option_id = {$opKey}.id");
}
if($hiddenCategories) $q->where(array("{$opKey}.category:NOT IN" => $hiddenCategories));
$q->prepare();
$q->stmt->execute();
$options = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$_options = array();
foreach ($options as $option) {
$filter = '';
if ($option['type'] == 'checkbox') {
$filter = ':boolean';
}
$_options[] = 'msoption|' . $option['key'].$filter;
}
$scriptProperties['filters'] = implode(',', array_merge($filters, $_options));
return $modx->runSnippet('mFilter2', $scriptProperties);
Сниппет в случае, если документ находится в корне сайта (Это значит верхний каталог), добавляет к фильтрации вывод категорий и выбирает все свойства кроме тех у которых категории (папки) не те, что мы указали в качестве значения параметра hiddenCategories, иначе он выводит те свойства которые назначены только текущей категории товаров.
Тут напишу что-то очевидное: Вроде того, что знатоки прыгайте в комментарии и дополняйте или исправляйте код____________________________________
На счёт цикла MIGX: Если кто ждал или ждет, извините, времени нет даже голову почесать. Есть пара материалов и как будет время буду публиковать.
Кстати: тут Сергей Шлоков спросил аксакал он или нет, отвечу тут:
Конечно аксакал.А я буду надеяться, что я джигит)
☕ Угостить чашкой кофе
Комментарии: 4
Для чекбоксов, да/нет можно добавить условие, недавно просто делал такую задачу.
foreach ($options as $option) {
$filter = '';
if ($option['type'] == 'checkbox') {
$filter = ':boolean';
}
$_options[] = 'msoption|' . $option['key'].$filter;
}
Ок, добавил
Есть ещё интересная задача, чтобы в каждой категории можно было выбирать определённый набор фильтров =)
Что-то типа наследования наборов фильтров в категориях?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.