Новинки товаров
Задача: Получить данные о последних добавленных товаров (новинок) за определенное количество дней.
Реализация: Напишем обработчик событий, вызывающихся при добавления нового объекта каталога (товара), в котором будем заполнять значением текущего времени поле типа "Дата". Также, напишем кастомный макрос, возвращающий данные о новых товаров, которые были добавлены не ранее чем за определенное количество дней.
В модуле "Шаблоны данных" для типа данных "Объекты каталога" добавим поле типа "Дата" с идентификатором "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'));
?>