История просмотренных страниц на MODx Revo
Здравствуйте, возможно кто-то сталкивался с такой задачей, реализация истории просмотренных страниц, поделитесь опытом реализации или возможно существует некое готовое решение?
Если делать самому, то получается придется привязываться к сессии и уже туда записывать id'ишники текущих документов?
Если делать самому, то получается придется привязываться к сессии и уже туда записывать id'ишники текущих документов?
Комментарии: 11
Василий, всю голову сломал, никак не могу понять почему он не выводит документы с помощью pdoResources.
Я уже всё проверил, все параметры верны, но возвращает string(0) ""
Помогите понять в чем заключается ошибка.
Код: (правленый ваш, я не использую минишоп т.к. он ненужен)
Я уже всё проверил, все параметры верны, но возвращает string(0) ""
Помогите понять в чем заключается ошибка.
Код: (правленый ваш, я не использую минишоп т.к. он ненужен)
<?php
$id = $modx->resource->id;
//echo $modx->resource->get('class_key');
if (!isset($limit)) {$limit = 10;}
// Добавляем просмотренный товар MS2 в сессию
if ($modx->resource->get('class_key') == 'modDocument') {
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 ($action == 'returnViewed') {
if (!isset($_SESSION['viewed'])) {
return;
}
$ids = array_reverse($_SESSION['viewed']);
//print_r($ids);
$scriptProperties = array();
$config = array(
'resources' => '"-'.$modx->resource->id.','.implode(',', $ids).'"'
,'parents' => 0
,'limit' => $limit
,'tpl' => 'tpl.pdoResources'
);
$config = array_merge($config, $scriptProperties);
//print_r($config);
return $modx->runSnippet('pdoResources', $config);
//var_dump($a); die();
}
вызов:[[!LastView? &limit=`10` &action=`returnViewed`]]
и так так же не работает, выводит только массив
<?php
$id = $modx->resource->id;
if (!isset($limit)) {$limit = 10;}
// Добавляем просмотренную страницу
if ($modx->resource->get('class_key') == 'modDocument') {
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 ($returnViewed == '1') {
if (!isset($_SESSION['viewed'])) {return;}
$ids = array_reverse($_SESSION['viewed']);
if (empty($ids)) {return;}
$config = array(
'resources' => '-'.$modx->resource->id.','.implode(',', $ids)
,'parents' => 0
,'limit' => $limit
,'tpl' => 'tpl.pdoResources'
);
echo '<!-- Массив: '.implode(',', $ids).' -->';
$rows = $modx->runSnippet('pdoResources', $config);
echo '<!-- '.$rows.' -->';
if (!empty($rows)) {
return $modx->getChunk('tpl.pdoResources', array('rows' => $rows));
}
}
Привет, Паша посмотри свой сниппет на этой странице bezumkin.ru/sections/tips_and_tricks/1917/ с ним что то не так, когда вывожу на странице, то сайт падает с 500 ошибкой! Пишу тут, т.к. в той теме комментарии отключены, надеюсь тут видишь. Буду очень благодарен, спасибо!
А вот этот сниппет — Looked не подойдёт?
То что доктор прописал!
Код который использую на своем сайте:
<?php
/*
&limit — лимит отображаемых и записываемых id страниц, по умолчанию 10
&show — отображать страницы или нет (0/1), по умолчанию 0 (будет записывать, но не отображать)
&snippet — наименование сниппета, с помощью которого будут выводиться данные (pdoResources, getResources и т.п.), по умолчанию 0 (false, то будет выводить данные с помощью modResource)
&parents — id родительского документа, по умолчанию 0
&tpl — наименования чанка с шаблоном, по умолчанию tpl.LastView.
&except — id исключаемых документов через запятую, по умолчанию 0.
&message — вывод сообщения, когда истории нет.
Пример:
// [[!LastView? &limit=`10` &show=`1` &snippet=`0` &parents=`0` &tpl=`tpl.LastView` &except=`[[++site_start]],404,502`]]
*/
$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 (!isset($message)) {$message = '';}
// Проверяем исключения
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 $message;}
$ids = array_reverse($_SESSION['viewed']);
if (empty($ids)) {return $message;}
}
// Выводим просмотренные страницы без вызова сниппета
if ($show == '1' && $snippet == false) {
$output = '';
foreach ($ids as $tsID) {
if($tsID != $id) {
$page = $modx->getObject('modResource', $tsID)->toArray();
$output .= $modx->getChunk($tpl, $page);
}
}
// Вывод результат в плейсхолдер или в результат работы
if (isset($toPlaceholder)) {
$modx->toPlaceholder(($toPlaceholder!=false?$toPlaceholder:'view'),$output,'last');
} else {
return ($output?$output:$message);
}
}
// Выводим просмотренные страницы через вызов сниппета
if ($show == '1' && $snippet != false) {
$config = array(
'resources' => '-'.$id.','.implode(',', $ids)
,'parents' => $parents
,'limit' => $limit
,'tpl' => $tpl
);
// Вывод результат в плейсхолдер или в результат работы
if (isset($toPlaceholder)) {
$modx->toPlaceholder(($toPlaceholder!=false?$toPlaceholder:'view'),$modx->runSnippet($snippet, $config),'last');
} else {
$output = $modx->runSnippet($snippet, $config);
return ($output?$output:$message);
}
}
Чанк:<a href="[[~[[+id]]]]" data="[[+id]]">[[+pagetitle]]</a>
У меня все стабильно работает, никаких ошибок не возникало.
К сожалению нет, проверил на своем и другом сайте, тоже самое, падает с 500 ошибкой. Или ты чего не дописал или, возможно сниппет использует другой сниппет, который нужно установить с репозитария?
п.с. у меня сайты крутятся на php 7.0
п.с. у меня сайты крутятся на php 7.0
Здесь мои знания ограничиваются, возможно кто-то сможет помочь, но как было написано выше, есть альтернатива (их множество).
Уже, взял Looked и использую его
Ребята не знаю поможет кому или, но у меня заработал этот вариант
<?php
/*
&limit — лимит отображаемых и записываемых id страниц, по умолчанию 10
&show — отображать страницы или нет (0/1), по умолчанию 0 (будет записывать, но не отображать)
&snippet — наименование сниппета, с помощью которого будут выводиться данные (pdoResources, getResources и т.п.), по умолчанию 0 (false, то будет выводить данные с помощью modResource)
&parents — id родительского документа, по умолчанию 0
&tpl — наименования чанка с шаблоном, по умолчанию tpl.LastView.
&except — id исключаемых документов через запятую, по умолчанию 0.
&message — вывод сообщения, когда истории нет.
Пример:
// [[!LastView? &limit=`10` &show=`1` &snippet=`0` &parents=`0` &tpl=`tpl.LastView` &except=`[[++site_start]],404,502`]]
*/
$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 (!isset($message)) {$message = '';}
// Проверяем исключения
if ($except != false) {
$add = 1;
foreach ($except as $value) {
if($value == $id) {$add = 0;}
}
}
if ($modx->resource->get('class_key') == 'modDocument') {
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 $message;}
$ids = array_reverse($_SESSION['viewed']);
if (empty($ids)) {return $message;}
}
// Выводим просмотренные страницы без вызова сниппета
if ($show == '1' && $snippet == false) {
$output = '';
foreach ($ids as $tsID) {
if($tsID != $id) {
$page = $modx->getObject('modResource', $tsID)->toArray();
$output .= $modx->getChunk($tpl, $page);
}
}
// Вывод результат в плейсхолдер или в результат работы
if (isset($toPlaceholder)) {
$modx->toPlaceholder(($toPlaceholder!=false?$toPlaceholder:'view'),$output,'last');
} else {
return ($output?$output:$message);
}
}
// Выводим просмотренные страницы через вызов сниппета
if ($show == '1' && $snippet != false) {
$config = array(
'resources' => '-'.$id.','.implode(',', $ids)
,'parents' => $parents
,'limit' => $limit
,'tpl' => $tpl
);
// Вывод результат в плейсхолдер или в результат работы
if (isset($toPlaceholder)) {
$modx->toPlaceholder(($toPlaceholder!=false?$toPlaceholder:'view'),$modx->runSnippet($snippet, $config),'last');
} else {
$output = $modx->runSnippet($snippet, $config);
return ($output?$output:$message);
}
}
а не bezumkin.ru/sections/tips_and_tricks/1917/
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.