Блок "Ранее просмотренные товары" на MODX

"Ранее просмотренные товары", "Вы недавно смотрели" и т.д. - мало какой современный интернет-магазин обходится без этих блоков.

Обычно подобные блоки входят в состав дистрибутива интернет-магазина (Shopkeeper, minishop). Если же возникает потребность вывесли такой блок на обычном сайте (например, каталог без магазинной части, сайт со статьями и т.д.) - необходимо реализовать этот функционал самостоятельно, чем сейчас и займемся.

Логика довольно проста: при посещении страницы, id этой страницы сохраняется в cookie (как вариант - в сессии), добавляясь к записаным ранее. На нужных страницах мы из этих cookie достаем список id, хранящийся там и скармливаем этот список Ditto, DocLister'u, pdoResources, любому другому сниппету, который, имея список id документов, отобразит эти документы в нужном виде.

Создаем сниппет lastViewed. Я его делал для Evolution, но для Revolution он тоже подходит, единственно, нужно id товара чуть по-другому получать, в соответствии с API MODX Revo

        
            
<?php
$id    = isset($id)? $id : $modx->documentIdentifier;

$limit = isset($limit)? $limit : 3;



if ($action == 'add') {
	if (!isset($_SESSION['viewed'])) {
		$_SESSION['viewed'] = array($id); // Если нет нужной куки - создаем ее и записываем в нее id
	}
	else {
		if (in_array($id, $_SESSION['viewed'])) {
			$key = array_search($id, $_SESSION['viewed']);
			unset($_SESSION['viewed'][$key]);  // Если id уже есть в списке - удаляем, с целью потом поместить в конец списка
		}
		
		$_SESSION['viewed'][] = $id;
	}
}


// Выводим просмотренные товары
if ($action == 'show') {
	if (empty($_SESSION['viewed'])) return;
	
	$ids = array_reverse($_SESSION['viewed']); // выстраиваем id согласно очередности посещения страниц
	$ids = array_slice($ids,0,$limit); // Забираем нужное количество элементов
	
	$docs=implode(',', $ids);
	return $docs;
}
?>
        
    

В шаблоне товара (или любой страницы, посещение которой нужно записывать) вызываем сниппет с указанием параметра add:

    
    
    [!lastViewed?&action=`add`!]
    
    

Ну и в любом месте документа мы можем получить список идентификаторов последних просмотренных товаров:

    
    
    [!lastViewed?&action=`show`!]
    
    


Теги: Evolution, Revolution, сниппет

Сообщение отправлено

Закрыть
Комментировать