В предыдущих статьях данной серии мы создали всего два файла xml и php. Я уверен, после этого вы уже прописали какой то функционал в свой компонент. Но вот незадача: обращение к компоненту в joomla оставляет желать лучшего.
index.php?option=component&data=lala&to=topolya |
при включении ЧПУ (SEF) ситуация улучшается не сильно
/component/moy_component/?data=lala&to=topolya |
В век человеко-ориентированных URL такой адрес будет не удобен, и хочется, чтобы он был более красивым. К примеру таким
/moy/lala/topolya.html |
Как это сделать, читайте ниже
Joomla предоставляет удобный инструмент роутинга. Это файл router.php в корне компонента. А в нем, всего две функции
<?php function Moy_ComponentParseRoute( $segments ){} function Moy_ComponentBuildRoute( $query ){} |
Первая, как не сложно догадаться по названию парсит ЧПУ URL , и раскладывает его в обычный &name=value.
К примеру запрашиваем страницу
/moy/lala/topolya.html |
на вход Moy_ComponentParseRoute в параметр $segments подается array('moy','lala','topolya.html'). По каким критериям это преобразовывать в массив array('option'=>'com_moy_component','data'=>'lala','to'=>'topolya') решать исключительно вам, но на выходе функции должен быть именно такой массив.
Вторая, делает обратную операцию. Берет массив ключ значение и на выходе отдает массив значений сегментов. Т.е. из array('option'=>'com_moy_component','data'=>'lala','to'=>'topolya') вы по какой-то своей логике должны получить array('moy','lala','topolya.html').
Эти две операции и делают все волшебство с модификацией из одного формата URL в другой. Теперь сделать SEF ссылки в вашем компоненте не сложнее чем скачать гонки на планшет андроид. Мой 5-ти летний сын сделал это сам, мы до сих пор не знаем как.
Посмотрим на примере, чтобы понять это лучше
<?php function Moy_componentParseRoute( $segments ){ $vars = array ( 'view' => 'jqueryplugins' ); if ( count ( $segments ) ){ switch ( $segments [0]){ default : $vars [ 'view' ] = 'item' ; $vars [ 'task' ] = 'readitem' ; $vars [ 'cpu' ] = $segments [0]; break ; } } return $vars ; } function Moy_componentBuildRoute( $query ){ $segments = array ( 'moy' ); unset( $query [ 'option' ]); return $segments ; } |
Пока наш плагин не заработает, так как нужно. В адресной строке вы все еще будете видеть /component/moy_component/
Чтобы избавится от этого префикса, необходимо добавить в какое-либо меню на сайте ссылку на наш компонент и в alias прописать требуемое сокращение. К примеру moy, тогда это префикс отпадет.
Комментарии