Универсальный пример навигации по частям

Здесь приведен пример кода для навигации по блоку, данные которого разбиты на части.

Убывающая нумерация частей при обратной выборке
Убывающая нумерация
частей при обратной выборке
Код без всякой переделки годится, как для прямой, так и для обратной выборки. Единственное различие – при обратной выборке ссылки на разные части будут отображаться в порядке убывания номеров, так как элементы массива $request['part']['parts'] будут идти в обратном порядке.

Для перехода на соседние части применены переменные шаблона $request['part']['prev'] и $request['part']['next'], в которых уже учтена возможность как обратной, так и естественной прямой выборки.

.tpl
<?php

    # Ссылки на соседние части
    if (empty($request['part']['prev']))
        echo "предыдущая";
    elseif ($request['part']['prev'] == $request['part']['default'])
        echo"<a href='?page=$page'>предыдущая</a>";
    else
        echo "<a href='?page=$page&block=$block&part=$request['part']['prev']'>предыдущая</a>";

    if (empty($request['part']['next']))
        echo "следующая";
    elseif ($request['part']['next'] == $request['part']['default'])
        echo"<a href='?page=$page'>следующая</a>";
    else
        echo "<a href='?page=$page&block=$block&part={$request['part']['next']}'>следующая</a>";
        
        
    # Ссылки на каждую часть
    foreach ($request['part']['parts'] as $p)
    {
        if ($p == $request['part']['current']) # Текущая часть
            echo "<span>$p</span>";
        elseif ($p == $request['part']['default'])
            echo"<a href='?page=$page'>$p</a>";
        else
            echo "<a href='?page=$page&block=$block&part=$p'>$p</a>";                
    } 
    
?>

Номер части по умолчанию

В приведеном выше коде голубым маркером выделена ветка кода, исключающая дублирование страниц. Дело в том, что дефолтная часть может открываться по двум различным URL — с номером части и вообще без номера. Для поисковой оптимизации использование одного из таких URL желательно исключить. Лучше оставить вариант без номера части.

Часть, открываемая по умолчанию, то есть, без запроса part, может равняться единице или максимальному числу частей, в зависимости от сочетания параметров $params['backward'] и $params['part']['numbering']. Для того, чтобы узнать дефолтную часть и служит вспомогательный параметр $request['part']['default'].


См. также