Сейчас навигация на соседние страницы производится по родителю и соседним элементам. То есть навигация работает только относительно детей родительского элемента.
Код PHP:
<?php
$id = $modx->resource->get('id');
$parentId = $modx->resource->get('parent');
// $children = $modx->getChildIds($parentId,1,array("published"=>1));
$order = "ORDER BY menuindex asc";
$wh=" where published=1 and parent = $parentId ";
$table = 'modx_site_content';
$sql = "SELECT id FROM `$table` ".$wh." ".$order;
$query = new xPDOCriteria($modx, $sql, array());
$children = array();
if ($query->prepare() && $query->stmt->execute()){
$res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $row){
$children[]=$row["id"];
}
}
// echo "<pre>";
// print_r($children);die;
if (count($children)>0) {
$key = -1;
while($key == -1){
$key = array_search($id,$children);
}
$next = (($key+1) == count($children) ? -1 :($key+1));
$prev = $key-1;
if ($next>=0) {
$object = $modx->getObject('modResource', $children[$next]);
$modx->setPlaceholder('next','<p class="title-next"><a href="/'.$modx->makeUrl($object->get('id')).'">'.$object->get('pagetitle').'</a></p><a href="/'.$modx->makeUrl($object->get('id')).'" class="next"><em></em></a>');
} else {
$object = $modx->getObject('modResource', $children[$next]);
$modx->setPlaceholder('next','<p class="title-next"></p>');
}
if ($prev>=0) {
$object = $modx->getObject('modResource', $children[$prev]);
$modx->setPlaceholder('prev','<a href="/'.$modx->makeUrl($object->get('id')).'" class="prev"><em></em></a><p class="title-prev"><a href="/'.$modx->makeUrl($object->get('id')).'">'.$object->get('pagetitle').'</a></p>');
} else {
$object = $modx->getObject('modResource', $children[$next]);
$modx->setPlaceholder('prev','<p class="title-prev"></p>');
}
}
В такой структуре:
Вопрос в том, можно ли такую же навигацию реализовать только по "нужным" страницам без родителя, например по тегу, или по id, но номер не всегда идет по порядку. Подскажите пожалуйста.