История просмотренных страниц на 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/            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.