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


Комментарии