Как получить список товаров, купленных в интернет магазине
Материал из Umicms
Актуально для версии 2.9.5
Задача
Если Вы столкнулись с данной задачей, то решить её стандартными средствами нельзя. Необходимо написать кастомный макрос, пример оного дан ниже.
Решение
%custom getProducts()% — выводит перечень товаров, купленных на Вашем сайте.
Параметры: custom getProducts([$template = 'default', $offset = 0, $limit = 15, $expire = 0])
$template
Шаблон, по которому выводится результат макроса. В XSLT-шаблонизаторе игнорируется.
$offset
Смещение от начала группы найденных элементов.
$limit
Количество элементов к выводу.
$expire
Время хранения кеша в секундах, если не указан, то равен нулю. Кеш храниться в директории /sys-temp/getProducts/.
Для применения этого макроса скопируйте содержимое листинга макроса в файл /classes/modules/custom.php.
public function getProducts($template = 'default', $offset = 0, $limit = 15, $expire = 0){
$offset = intval($offset);
$expire = intval($expire);
$limit = intval($limit);
$folder = CURRENT_WORKING_DIR . '/sys-temp/getProducts/';
$file = md5($template . $offset . $limit . $expire);
$path = $folder . $file;
if(!is_dir($folder)) mkdir($folder, 0777, true);
if(is_file($path)) $mtime = filemtime($path);
if(!is_file($path) || time() > ($mtime + $expire)){
$order_items = new selector ('objects');
$order_items->types('object-type')->name('emarket', 'order_item');
$order_items->limit($offset, $limit);
$order_items = $order_items->result();
$product_pages = array();
foreach($order_items as $order_item){
if(count($order_item->getValue('item_link')) != 0){
$product_pages[] = $order_item->getValue('item_link');
}
}
file_put_contents($path, serialize($product_pages));
$product_page = array();
list($itemsTemplate, $itemTemplate) = def_module::loadTemplates("catalog/{$template}", "items", "item");
$item = array();
$items = array();
$hierarchy = umiHierarchy::getInstance();
foreach($product_pages as $product_page){
$item['attribute:id'] = $product_page[0]->id;
$item['attribute:link'] = $hierarchy->getPathById($product_page[0]->id);
$item['attribute:name'] = $product_page[0]->getName();
$items[] = def_module::parseTemplate($itemTemplate, $item);
}
$items = array('subnodes:items' => $items);
return def_module::parseTemplate($itemsTemplate, $items);
}else{
$product_page = array();
$product_pages = array();
$product_pages = unserialize(file_get_contents($path));
list($itemsTemplate, $itemTemplate) = def_module::loadTemplates("catalog/{$template}", "items", "item");
$item = array();
$items = array();
$hierarchy = umiHierarchy::getInstance();
foreach($product_pages as $product_page){
$item['attribute:id'] = $product_page[0]->id;
$item['attribute:link'] = $hierarchy->getPathById($product_page[0]->id);
$item['attribute:name'] = $product_page[0]->getName();
$items[] = def_module::parseTemplate($itemTemplate, $item);
}
$items = array('subnodes:items' => $items);
return def_module::parseTemplate($itemsTemplate, $items);
}
}