Новинки товаров

Материал из Umicms
Версия от 22:32, 10 августа 2013; Stexe (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов '''Задача:''' Получить данные о последних добавленных …»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск


Задача: Получить данные о последних добавленных товаров (новинок) за определенное количество дней.

Реализация: Напишем обработчик событий, вызывающихся при добавления нового объекта каталога (товара), в котором будем заполнять значением текущего времени поле типа "Дата". Также, напишем кастомный макрос, возвращающий данные о новых товаров, которые были добавлены не ранее чем за определенное количество дней.

В модуле "Шаблоны данных" для типа данных "Объекты каталога" добавим поле типа "Дата" с идентификатором "create_date" без кавычек
В файл classes\modules\exchange\custom_events.php добавим код назначения обработчика событий:

<?php
	new umiEventListener("exchangeOnAddElement", "exchange", "setCreateDate");
	new umiEventListener("systemCreateElement", "exchange", "setCreateDate");
?>

В файл classes\modules\exchange\__custom.php добавим код обработчика событий:

public function setCreateDate(iUmiEventPoint $oEventPoint){
	if ($oEventPoint->getMode()=='after'){
		$element = $oEventPoint->getRef('element');
		$obj = $element->getObject();
		$type_id = $element->getTypeId();
		$type = umiHierarchyTypesCollection::getInstance()->getType($type_id);
		if (	($type->getName()=='catalog') && ($type->getExt()=='object')	)
			$obj->setValue('create_date',time());
	}
}

В файл classes\modules\catalog\__custom.php добавим код кастомного макроса, возвращающий данные о последних добавленных товарах. Параметр $days определяет актуальность новизны товара, то есть новым товаром считается тот, который был добавлен не более чем за количество дней $days до текущего времени:

public function getNewItems($days = 1){
	$days_ts = intval($days) * 3600 * 24;
	$items = new selector('pages');
	$items->types('object-type')->name('catalog','object');
	$items->where('create_date')->more(time() - $days_ts);
			
	$arr = Array();
	$lines = Array();
	foreach ($items as $item){
		$photo = $item->getValue('photo');
		$arr['node:value'] = $item->getName();
		$arr['attribute:id'] = $item->id;
		$arr['attribute:link'] = $item->link;
		$arr['attribute:path_to_photo'] = $photo->getFilePath();
		$lines['nodes:items'][0]['nodes:item'][] = $arr;
	}
	return def_module::parseTemplate('',$lines);
}

В файл classes\modules\catalog\permissions.custom.php нужно добавить следующий код:

<?php
	$permissions = Array(
		'view' => Array('getNewItems'));
?>