Решение: История просмотров на MODx Revo
Реализация сниппета, который бы выводил историю просмотренных страниц.
Ранее создавал "Вопрос" История просмотренных страниц на MODx Revo, в ней Василий Наумкин поделился ссылкой, на содержании данной ссылки, спустя время, написал сниппет.
Представляю к вашему вниманию.
Сниппет LastView:
<?php
$id = $modx->resource->id;
if (!isset($limit)) {$limit = 10;}
if (!isset($show)) {$show = 0;}
if (!isset($snippet)) {$snippet = 0;}
if (!isset($parents)) {$parents = 0;}
if (!isset($tpl)) {$tpl = 'tpl.LastView';}
if (!isset($except)) {$except = 0;} else {$except = split(",",$except);}
// Проверяем исключения
if($except != false) {
$add = 1;
foreach ($except as $value) {
if($value == $id) {$add = 0;}
}
}
// Добавляем просмотренную страницу
if ($add != false) {
if (!isset($_SESSION['viewed'])) {
$_SESSION['viewed'] = array($id);
} else {
if (in_array($id, $_SESSION['viewed'])) {
$key = array_search($id, $_SESSION['viewed']);
unset($_SESSION['viewed'][$key]);
}
if (count($_SESSION['viewed']) > $limit) {
array_shift($_SESSION['viewed']);
}
$_SESSION['viewed'][] = $id;
}
}
// Предварительные проверки
if ($show == '1') {
if (!isset($_SESSION['viewed'])) {return;}
$ids = array_reverse($_SESSION['viewed']);
if (empty($ids)) {return;}
}
// Выводим просмотренные страницы без вызова сниппета
if ($show == '1' && $snippet == false) {
$output = '';
foreach ($ids as $tsID) {
if($tsID != $id) {
$page = $modx->getObject('modResource', $tsID)->toArray();
$output .= $modx->getChunk($tpl, $page);
}
}
return $output;
}
// Выводим просмотренные страницы через вызов сниппета
if ($show == '1' && $snippet != false) {
$config = array(
'resources' => '-'.$id.','.implode(',', $ids)
,'parents' => $parents
,'limit' => $limit
,'tpl' => $tpl
);
return $modx->runSnippet($snippet, $config);
}пример вызова:
[[!LastView? &limit=`10` &show=`1` &snippet=`0` &parents=`0` &tpl=`tpl.LastView` &except=`[[++site_start]],404,502`]]пример шаблона tpl.LastView:
<a href="[[~[[+id]]]]">[[+pagetitle]]</a>так же можно использовать вывод любых других данных документа
доступные значения:
-
&limit - лимит отображаемых и записываемых id страниц, по умолчанию 10
-
&show - отображать страницы или нет (0/1), по умолчанию 0 (будет записывать, но не отображать)
-
&snippet - наименование сниппета, с помощью которого будут выводиться данные (pdoResources, getResources и т.п.), по умолчанию 0 (false, то будет выводить данные с помощью modResource)
-
&parents - id родительского документа, по умолчанию 0
-
&tpl - наименования чанка с шаблоном, по умолчанию tpl.LastView.
-
&except - id исключаемых документов через запятую, по умолчанию 0.
Мой пример: Проект про офтальмологию (История просмотров, перед футером страницы)
.
-- Вот и всё, возможно кому нибудь пригодится
0
👍
👎
❤️
🔥
😮
😢
😀
😡
3 591
07.10.2013 16:09:07