FL.ru – фриланс сайт удаленной работы №1. Поиск удаленной работы, фрилансеры.

Человекопонятные ссылки в Joomla 1.5 — продолжение

Категории: Joomla

Начало здесь.
Представленная дальше функция обрабатывает адрес:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function [Componentname]ParseRoute( $segments )  {
 $vars = array();         
 switch($segments[0])         
 {                 
 case 'categories':                         
 $vars['view'] = 'categories';                         
 break;                 
 case 'category':                         
 $vars['view'] = 'category';                         
 $id = explode( ':', $segments[1] );                         
 $vars['id'] = (int) $id[0];                         
 break;                 
 case 'article':                         
 $vars['view'] = 'article';                         
 $id = explode( ':', $segments[1] );                         
 $vars['id'] = (int) $id[0];                         
 break;         
 }         
 return $vars;  }

В этой функции элементы в $query организованы в заданной последовательности. При обработке $segments[0] результатом является получение доступа к виду. Адрес, генерируемый в этом примере, содержит внутри себя название вида, е отображая при этом иерархической последовательности. Ссылка отображается так:

1
http://www.example.com/[menualias]/[view]/[slug]

В более сложном примере будет создана иерархия:

При просмотре записи: http://www.example.com/[menualias]/[category]/[article]

При просмотре одной рубрики: http://www.example.com/[menualias]/[category]

При просмотре рубрик://www.example.com/[menualias]

После первых двух шагов ссылка на запись будет выглядеть таким образом:

1
JRoute::_( 'index.php?view=article&catid='.$row->catslug .'&id='.$row->slug );

Ссылка на рубрику будет выглядеть так:

1
JRoute::_( 'index.php?view=category&id='.$row->catslug );

Так выглядит router.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function  [Componentname]BuildRoute(&$query){         
 $segments = array();         
 if(isset( $query['catid'] ))         
 {                  
 $segments[] = $query['catid'];                  
 unset( $query['catid'] );         
 };         
 if( isset($query['id']) )         
 {                  
 $segments[] = $query['id'];                  
 unset( $query['id'] );         
 };         
 unset( $query['view'] );        
 return $segments;  
 }

Имя вида не добавляется в массив. Дополнительное значение catid при нажатии $ сегментов. Переменное значение $query[‘view’] отключается и значение catid передается в $segments.

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
function [Componentname]ParseRoute($segments)  {         
$vars = array();         
$menu =& JMenu::getInstance();         
$item =& $menu->getActive();         
// общее число сегментов         
$count = count( $segments );         
//вид ID         
switch( $item->query['view'] )         
{                 
case 'categories':                         
if($count == 1) {                                 
$vars['view'] = 'category';                         
}                         
if($count == 2) {                                 
$vars['view'] = 'article';                         
}                         
$id = explode( ':', $segments[$count] );                         
$vars['id'] = (int) $id[0];                         
break;                 
case 'category':                         
$id   = explode( ':', $segments[$count] );                         
$vars['id']   = (int) $id[0];                         
$vars['view'] = 'article';                         
break;         
}         
return $vars;  }

Здесь задействовано несколько частей слага, так как, не имея вида в $segments, мы все-таки должны выискать способ его передачи. Чтобы узнать уровень иерархии, нужно узнать название вида в активном меню:

1
$item->query['view']

Еще одна задача – нужно знать число элементов в $segments: $count = count( $segments ); . Владея этими данными, можно правильно установить иерархию во всех трех вариантах. Как результат всей нашей работы – человекопонятная ссылка (ЧПУ).




Подпишитесь на рассылку блога
max1net.com:
Уже подписались человек
Укажите свой e-mail