Поддержать Проект

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • Готовые примеры

Вывод просмотренных документов Ditto

  • Готовые примеры
  • Вывод просмотренных документов Ditto
1677

Вывод просмотренных документов Ditto

В интернет-магазине на базе shopkeeper необходимо было сделать список просмотренных товаров. Так же, решение можно использовать для вывода любых просмотренных документов.

Для хранения массива просмотренных товаров будем использовать cookie. Создаем сниппет viewedDocuments:

<?php
$docid = $modx->documentIdentifier;
$site_url = $modx->config['site_url'];
$site_url = substr($site_url,7,-1);
if (!isset($_COOKIE['viewedDocuments'])) {
	setCookie('viewedDocuments', $docid, 0, '/', $site_url);
}
else {
	$docs = explode(",",$_COOKIE['viewedDocuments']);
	if (!in_array($docid,$docs)) $docs[] = $docid;
	$docs = implode(",",$docs);
	setCookie('viewedDocuments', $docs, 0, '/', $site_url);
}
return;
?>

Этот сниппет необходимо вызывать некэшируемым в нужном шаблоне. В моем случае, это шаблон товара. Добавляем вызов:

[!viewedDocuments]]

Теперь необходимо вывести документы, которые уже есть в куках. В случае, если товар (документ) еще не просмотрен, блок выводить не будем.

Создаем сниппет cookieDocuments:

<?php
if (!isset($_COOKIE['viewedDocuments'])) return;
$docs = explode(",",$_COOKIE['viewedDocuments']);
$doclist = array();
foreach ($docs as $doc) {
	if (intval($doc) != 0) $doclist[] = intval($doc);
}
if (count($doclist) == 0) return;
$doclist = array_reverse($doclist);
$doclist = implode(",",$doclist);
$output = $modx->runSnippet('Ditto',array(
	'documents' => $doclist,
	'tpl' => $tpl,
	'outerTpl' => $wrapper,
	'display' => '30',
	'extenders' => 'customsort'
));
return $output;
?>

Вызываем сниппет в том месте, где необходимо вывести список:

[!cookieDocuments? &tpl=`vdoc_tpl` &wrapper=`vdoc_wrapper`]]

В параметре display установите максимальное число выводимых документов. Чанк для вывода документа vdoc_tpl создается по логике Ditto &tpl. Чанк vdoc_wrapper – обертка для результатов, если они есть.

Просмотренные товары:
    [+ditto+]