

|
|
 
Метод 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 |
Дополнительный параметрический хвост ссылки
Необязательный аргумент.
Это часть человекопонятной ссылки, которую по каким-либо причинам нужно оставлять в параметрическом виде.
|
|
Пример кода
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).
|