В предыдущих статьях данной серии мы создали всего два файла 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, тогда это префикс отпадет.
Комментарии