Как получить список товаров, купленных в интернет магазине

Материал из 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);
			}
		}