Блог

Категории:  

Программирование → ЧПУ для MVC компонента Joomal 1.5
09.06.2010

При создании своего компонента по архитектуре MVC в Joomla 1.5 существует стандартный механизм для формирования ЧПУ.

Для того, чтобы этот механизм работал, нужно создавать ссылки специальной функцией Joomla:

1
echo JRoute::_("index.php?option=com_blog&view=item&id=12:db-v-modeli-joomla");

Данная функция сформирует ссылки вида blog?view=item&id=12:db-v-modeli-joomla

Для того, чтобы ссылка приобрела вид blog/item/12-db-v-modeli-joomla, нужно в пользовательской части нашего компонента добавить файл router.php cо следующим содержанием:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//создание роута
//называть неоходимо как Имя_КомпонентаBuildRoute
function BlogBuildRoute(&$query)
{
$segments = array();
if(isset($query['view'])) {
$segments[] = $query['view'];
unset( $query['view'] );
}
if(isset($query['id'])) {
$segments[] = $query['id'];
unset( $query['id'] );
};
return $segments;
}
//парсинг
//называть неоходимо как Имя_КомпонентаParseRoute
function BlogParseRoute($segments)
{
$vars = array();
switch($segments[0]){
case 'blog':
$vars['view'] = 'blog';
break;
case 'item':
$vars['view'] = 'item';
$id = explode( ':', $segments[1] );
$vars['id'] = (int) $id[0];
break;
}
return $vars;
}

В функции BlogBuildRoute() мы определяем или установлены переменные, записываем эти переменные в массив сегментов и удаляем их. Можно удалить любое количество переменных, которые вы создали в строке.

В функции BlogParseRoute() мы получаем массив с сегментами запроса и разбираем его c помощью switch. В зависимости от того, какие у вас в текущем виде были удалены переменные, назначаем ассоциированному массиву $vars ключ, равный этой переменной, и значение этой переменной, взятой из массива $segments.

Обратите внимание на строки:


1
2
$id = explode( ':', $segments[1] );                         
$vars['id'] = (int) $id[0];

Для чего мы написали подобное? Поскольку в запросе для ЧПУ мы передаем ссылку в виде 12:db-v-modeli-joomla (то есть, это смесь id с каким-то alias, созданным нами), то нужно отделить идентификатор id от префикса alias. Вот первая строка и разбивает запись на массив, в котором нулевой элемент — id, а первый элемент — alias. И во второй строке переменной id мы уже назначаем значение id.


Автор: Денеж Александр
Теги: