Кастомизация макроса %content redirect()% — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «'''Актуально для версии 2.9.5''' == Задача == Предположим,имеется следующая структура каталога:…»)
 
 
Строка 34: Строка 34:
 
}
 
}
 
</source>
 
</source>
 +
[[category:Написание кастомных макросов]]

Текущая версия на 12:57, 16 июля 2018

Актуально для версии 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);
}