Основное назначение метода - это превращение параметрических ссылок (то есть, состоящих из набора параметров) в человекопонятные URL (ЧПУ).
Второе назначение метода — регистрация псевдостраниц в структуре сайта. Без регистрации псевдостраницы вы не сможете задать ее титул (и другие данные из раздела Настройки страницы. Вы не сможете создать навигационную цепочку с помощью метода Router::getBreadcrumbs(), и вообще, не будет работать ни один метод класса Router.
Метод Router::convert() нужно применять в первую очередь ко всем первичным ссылкам, то есть, ссылкам, находящимся в навигационных блоках. При этом нужно быть внимательными, и указывать правильные ключи для регистрации параметрических ссылок. Для конвертации же вторичных ссылок, никаких доп. параметров в функцию передавать не нужно.
У метода имеются два параметра: Router::convert($phref, $infos=[])
Параметр | Примечания |
---|---|
$phref — относительный параметрический URL |
|
$infos['name'] — название страницы. Отображается в навигационной цепочке (хлебные крошки). |
|
$infos['title'] — титул страницы. Содержимое тега <title>. | |
$infos['alias'] — алиас (псевдоним) страницы. Отображается как элемент в ЧПУ. Автоматически производится транслитерация кириллицы в латиницу, если включена транслитерация |
|
$infos['key'] — уникальный ключ ссылки. Рекомендуется использовать комбинацию из номера исходного блока и номера строки записи, в которой находится ссылка: $blockInfo['src-block-id'].'-'.$dat['rec']. |
|
$infos['parent-key'] — ключ родительской ссылки. Если родительская страница является штатной страницей (не псевдостраницей) присвойте этому элементу значение: пустая строка (''). Если родительские ключи программно вычислить не удается, существует ручной метод, а именно: в окне Настройки страницы |
|
$infos['xhref'] Это часть человекопонятной ссылки, которую по каким-либо причинам нужно оставлять в параметрическом виде. |
|
$infos['url-params'] |
|
<?php $infos['parent-key'] = ''; echo '<ul>'; foreach ($tab as $dat) { $phref = '?page='.$page.'&block=36&p[1]='.$dat['rec']; $infos['name'] = $dat[1]; //['alias'] и ['title'] будут такими же $infos['key'] = $block.'-'.$dat['rec']; $href = Router::convert($phref, $infos);//human href echo '<li>'.$dat['edit'].'<a href="'.$href.'">'.$dat[1].'</a></li>'; } echo '</ul>'; ?>
Для вторичных ссылок, например (ссылок, не находящихся в навигационных блоках), второй параметр $infos нужно опустить: $href = Router::convert($phref)
.
Это касается как штатных ссылок, так и ссылок на псевдостраницы.
В первом случае эти опции просто не нужны, во втором случае эти опции приведут к нежелательной регистрации новой псевдостраницы.
В полях varchar, предназначенных для хранения URL, желательно хранить параметрические ссылки, которые при выводе в шаблоне преобразовывать с помощью Router::convert().
<?php
$types[1]='varchar(255)';
?>
<a href="<?=Router::convert($dat[1])?>">
Подробнее
</a>
Для исключения ошибок, в предобработчике обновления можно производить преобразование к относительному параметрическому виду:
<?php
$_POST['dat'][1] = Url::convertToRelative($_POST['dat'][1]);
?>
Впрочем, есть более простой способ для автоматического преобразования URL. Он, кстати, годится не только для полей в которых хранятся URL, но и для больших текстов, содержащих в себе ссылки.
Обработка ссылок с параметром part (с пагинацией) имеет особенности. Хотя запрос part и создает новый URL, однако такие ссылки не регистрируются системой, и считаются вторичными.
Поэтому массив $infos можно опустить. Однако, выводить в хвост часть URL, связанную с запросом part, не нужно, так как система должна обработать параметрический URL и сформировать человекопонятный URL (ЧПУ) с учетом запроса part.
В ЧПУ с пагинацией в конец добавится номер части и слеш: katalog/instrument/dreli/48/
Кстати, из-за такого вида ЧПУ с пагинацией, в системе запрещены чисто цифровые алиасы страниц.
Чтобы не возникали разные ссылки, приводящие на одну и туже страницу, part-запрос, открывающий страницу по умолчанию, лучше опускать. Например вместо ?page=3&block=4&part=1
нужно писать ?page=3