Метод Router::hrefIsAncestor()

Меню - это не просто набор ссылок. Желательно отметить определенным классом те ссылки, которые являются предками текущей страницы (ближайший предок страницы — это родительская страница). А ссылку на текущую страницу лучше инактивировать.

С последней задачей можно легко справиться, воспользуясь переменной шаблона $page (идентификатор текущей страницы). Нужно просто проверять для каждой ссылки из меню, совпадает ли идентификатор страницы, на которую указывает эта ссылка с идентификатором текущей страницы.

Для выделения же ссылок на предков страницы нужно воспользоваться методом Router::hrefIsAncestor().

В качестве параметра метода нужно брать относительную ссылку (совершенно не важно какую: параметрическую или человекопонятную).

menu.tdd
<?php

    $titles[1] = 'Ссылка';
    $titles[2] = 'Наименование ссылки';

    $types[1] = 'page';
    $types[2] = 'varchar(100)';

    $params['multi-record'] = true;

?>

menu.tpl
<ul>
<?php
foreach ($tab as $dat)
{
    $href = Router::convert('?page='.$dat[1], ['name'=>$dat[2]]);
    # Стиль для ссылки на предка
    $ancestorClass = Router::hrefIsAncestor($href) ? ' class="ancestor"' : '';
    
    echo '<li>';
        if ($dat[1] == $page) # Текущая страница
            echo $dat[2];
        else     
            echo '<a href="'.$href.'"'.$ancestorClass.'>'.$dat[2].'</a>';
    echo '</li>';
}
?>
</ul>

Примечания

  • Не забывайте о возможностях, которые предоставляет таблица стилей. Например, задав параметры псевдо-класса A:visited в главном файле стиля !main.css, можно определенным образом выделять все посещенные ссылки (не только последнюю).

См. также