Кастомизация макроса %content redirect()%
Актуально для версии 2.9.5
Задача
Предположим,имеется следующая структура каталога: 1. Главная категория, в которой выводятся подкатегории 2. В каждой подкатегории выводится еще несколько подкатегорий, либо одна подкатегория, в которой находится только один товар. Редирект на конечный товар необходимо сделать с тех страниц, в которых выводится одна подкатегория с одним товаром в ней. Собственно на этот товар и необходимо сделать переадресацию. Через таблицу cms_redirects такой редирект работать не будет, так как страницы, с которых осуществляется переадресация существуют и активны.
Решение
В первую очередь, необходимо написать кастомный макрос, который будет выбирать определенные группы пользователей для вывода их в выпадающем списке, так, чтобы в выборку не были включены группы "зарегистрированные пользователи" и "супервайзеры". Добавим в модуле шаблоны данных для типа "группы пользователей" поле типа чекбокс с названием, например, "для регистрации" и отметим в модуле пользователи этот чекбокс у необходимых групп.
Открываем файл /classes/modules/users/_custom.php и вставляем туда следующий метод:
public function selected_groups($template = 'default'){
$groups = new selector('objects');
$groups->types('object-type')->id('36');
$groups->where('for_registration')->equals('1');
list($itemsTemplate, $itemTemplate) = def_module::loadTemplates("users/{$template}", "items", "item");
$item = array();
$items = array();
foreach($groups as $group){
$item['attribute:id'] = $group->getId();
$item['attribute:name'] = $group->getValue('nazvanie');
$items[] = def_module::parseTemplate($itemTemplate, $item);
}
$items = array('subnodes:items' => $items);
return def_module::parseTemplate($itemsTemplate, $items);
}