DLLastViews

DLLastViews: последние просмотренные документы

Сниппет для вывода последних просмотренных документов, например можно для магазинов выводить просмотренные товары.

В свойствах сниппета есть два параметра:

  1. Время хранения cookie. Задается в секундах, по умолчанию 30 дней
  2. Сколько документов запоминать? По умолчанию: 5

Автор: Максим

Установка:

  1. Создать новый сниппет и вставить туда код
  2. Поставить галочку «Анализировать DocBlock» и сохранить
<?php
/**
 * DLLastViews
 *
 * Conclusion viewed products with DocLister.
 *
 * @category    snippet
 * @version     1.1
 * @internal    @properties &expired=Время хранения cookie;text;2592000;2592000;по умолчанию: 30 дней &maxDocs=Сколько документов запоминать;text;5;5
 * @internal    @modx_category Content
 * @internal    @installset base
 * @author      Created By mkot, optimization Pathologic
 * 
 * @lastupdate  04/09/2017
 */

if (!isset($params['mode'])) $params['mode'] = 'register'; if (!isset($params['tpl'])) $params['tpl'] = '@CODE: '; $maxDocs = isset($maxDocs) ? $maxDocs : 5; $expired = isset($expired) ? $expired : 2592000; $params['idType'] = 'documents'; $item = array();

if (isset($_COOKIE['last_view']) and $_COOKIE['last_view'] != '') { $params['documents'] = $_COOKIE['last_view'];
$item = explode(',', $_COOKIE['last_view']);
}

switch ($params['mode']) { case 'register': if (!in_array($modx->documentIdentifier, $item)) { array_unshift($item, $modx->documentIdentifier); array_slice($item, 0, $maxDocs - 1); setcookie('last_view', implode(',', $item), time()+$expired, '/'); } break;

case 'show':      
    if (!empty($item)) {
                    return $modx->runSnippet('DocLister',$params);
            }
break;
    default:
    break;

}

Использование:

На страницах, которые нужно запоминать написать не кэшируемый вызов без параметров

[!DLLastViews!]

Там где нужно выводить список просмотренных документов написать некэшируемы вызов с параметрами. Все параметры, как у DocLister'а (кроме idType, он жестко задан в сниппете) и добавить параметр &mode=`show`

[!DLLastViews? 
    &mode=`show`
    &ownerTPL=`
    [+dl.wrap+]
` &tpl=`@CODE: <li><a href="[+url+]">[+title+]</a></li>` !]
Mem: 3.5 mb, MySQL: 0.0028 s, 2 req., PHP: 0.0416 s, all: 0.0444 s, cache.