CONTENT MANAGEMENT SYSTEM
Blox Logo
Blox CMS — блочный метод сайтостроения
.
 
Blox Help

←→

Метод Router::convert()

Метод Router::convert() позволяет превратить параметрические ссылки (то есть, состоящие из набора параметров) в человекопонятные URL (ЧПУ).

Метод Router::convert() нужно применять в первую очередь ко всем первичным ссылкам, то есть, ссылкам, находящимся в навигационных блоках. При этом нужно быть внимательными, чтобы указать правильные ключи для регистрации параметрических ссылок. Для конвертации же вторичных ссылок, никаких доп. аргументов в функцию передавать не нужно.

Полный набор аргументов функции выглядит так:
Router::convert($phref, $infos, $keys, $xhref);


АргументОписаниеПримечания
$phref Относительный параметрический URL
То есть, URL должен начинаться со знака '?'. Примеры:
?page=2 (штатная страница)
?page=2&block=47&p[1]=1 (псевдостраница)
$infos Массив с первоначальной информацией о странице.

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

Эти данные передаются только один раз. Они формируются, как правило, из названия ссылки, поэтому старайтесь с первого раза давать правильные названия ссылкам. Инфоданные можно изменить в окне Информация о странице

$infos['name'] — название страницы. Используется в навигационной цепочке (хлебные крошки). Можно использовать как заголовок страницы.

$infos['title'] — титул страницы. Содержимое тега <title>.

$infos['alias'] — алиас (псевдоним) страницы. Отображается как элемент в ЧПУ. Автоматически производится транслитерация кириллицы в латиницу. Для доменов на национальном языке транслитерацию можно отключить.

При отсутствии какого-либо элемента массива $infos, его значение автоматически берется из другого элемента массива.

$keys Массив с ключевыми данными для регистрации псевдостраниц.

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

Для штатных ссылок, то есть, ссылок без спец.запросов, аргумент $keys оставляйте пустым!

Ключи ссылки

$keys['block'] — номер блока, в котором находится код ссылки (желательно использовать переменную шаблона $srcBlock — номер исходного блока).

$keys['rec'] — номер записи, в которой находится код ссылки.

Эти ключи должны присутствовать обязательно, именно к ним приписывается параметрическая ссылка.

Родительские ключи

$keys['parentHrefBlock'] — номер блока, в котором находится родительская ссылка (желательно использовать переменную шаблона $srcBlock — номер исходного блока).

$keys['parentHrefRec'] — номер записи, в которой находится родительская ссылка.

C помощью этих ключей строится древо сайта. Однако указать их непосредственно возможно только в случае, когда ссылки всех уровней находятся в одном и том же блоке (многоуровневое меню).

Родительские ключи можно передать с помощью глобальной переменной из родительского шаблона, если тот выводится раньше.

Если вы не укажете родителя ссылки, то система попытается сама вычислить их, в том числе с помощью вспомогательных данных (см. ниже).

Вспомогательные данные

Эти данные помогут системе вычислить родительские ключи, если те не указаны.

$keys['level'] — уровень псевдостраницы относительно штатной родительской страницы. Целое положительное число, начиная с единицы.

Если родительские ключи программно вычислить не удается, существует надежный ручной метод, а именно: в окне
Информация о странице
$xhref Дополнительный параметрический хвост ссылки

Необязательный аргумент.

Это часть человекопонятной ссылки, которую по каким-либо причинам нужно оставлять в параметрическом виде.

  • Обычно — это вторичные ссылки, которые используются для сортировки, поиска по блоку и т.п. Для вторичных ссылок аргументы $infos и $keys нужно оставлять пустыми. Пример: $href = Router::convert($phref,"", "", 'sort[1]=desc');
  • Кстати, сортировку по умолчанию лучше задавать не в URL, в параметрах шаблона. Когда понадобится сортировка в порядке, противоположном от заданного по умолчанию, пишите соответствующий sort-запрос в хвосте функции Router::convert().
  • Запросы, которые на первый взгляд нужно было поместить в параметрический хвост, можно включить в основную часть ссылки. Ниже приведен пример ссылки для меню, основанного на поисковых запросах:
    $phref = '?page='.$page.'&block='.$block.';
    $phref .= '&search[2]='.$dat[1]';
    $href = Router::convert($phref, array('name'=>$dat[1]), array(...));
    echo '<a href="'.$href.'">'.$dat[1].'</a>';

Пример кода

nav.tpl

<?php
$keys['level'] = 1;
echo '<ul>';
    foreach ($tab as $dat)
    {
        $phref = '?page='.$page.'&block=36&p[1]='.$dat['rec'];
        
        $infos['name'] = $dat[1]; //['alias'] и ['title'] будут такими же
        
        $keys['block'] = $block;
        $keys['rec'] = $dat['rec'];

        $href = Router::convert($phref, $infos, $keys);//human href
        echo '<li>'.$dat['edit'].'<a href="'.$href.'">'.$dat[1].'</a></li>';
    }
echo '</ul>';
?>

Вторичные ссылки

Для вторичных ссылок, например, для ссылок, не находящихся в навигационных блоках, аргументы $infos и $keys нужно оставлять пустыми: $href = Router::convert($phref). Это касается как штатных ссылок, так и ссылок на псевдостраницы. В первом случае эти аргументы просто не нужны, во втором случае эти аргументы приведут к нежелательной регистрации новой псевдостраницы.

Особенности обработки запроса part

Обработка ссылок с параметром part (с пагинацией) имеет особенности. Хотя запрос part и создает новый URL, однако такие ссылки не регистрируются системой, и считаются вторичными.

Поэтому аргументы $infos и $keys можно опустить. Однако, выводить в хвост часть URL, связанную с запросом part, не нужно, так как система должна обработать параметрический URL и сформировать человекопонятный URL (ЧПУ) с учетом запроса part.

В ЧПУ с пагинацией в конец добавится номер части и слеш: katalog/instrument/dreli/48/

Кстати, из-за такого вида ЧПУ с пагинацией, в системе запрещены чисто цифровые алиасы страниц.

Чтобы не возникали разные ссылки, приводящие на одну и туже страницу, part-запрос, открывающий страницу по умолчанию, лучше опускать. Например вместо ?page=3&block=4&part=1 нужно писать ?page=3


Примечания

  • Если режим ЧПУ не включен, то функция Router::convert() возвращает параметрическую ссылку.
  • В каком виде ставить ссылку в редактируемом тексте (то есть, в окне редактирования): в человекопонятном или параметрическом? В первом случае ссылка может перестать действовать, если вы смените алиас страницы или ее предка. Во втором, случае, когда используется параметрическая ссылка, произойдет перенаправление на человекопонятную ссылку. Поэтому второй вариант предпочтительнее.
  • В режиме редактирования ЧПУ не включаются.
  • Применение ЧПУ не оправдано в случаях, когда адрес не виден пользователю (например, а Ajax).