Joomla!-开源天空

2008-12-05


自定义URL(中)

E-mail

JRoute


The JRoute::_() 转换内部的Joomla URL为一个自定义的URL,有三个参数

JRoute::_( $url, $xhtml = true, $ssl=0 );

$url是Joomal的内部相对或者绝对的路径,$xhtml是否XHTML格式输出,默认为真。$ssl表示是否采用https协议,0代表采用$url中默认的状态,而1强制采用https,-1强制采用http

应该这样使用:

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

row->slug 前文提到的,文章id和alias的组合

采用JRoute的另一个好处是router现在处理$option和$Itemid(菜单项编号),这样component就不必管理$option或者活动菜单项。而以前的版本必须这样做。

URL参数的顺序是非常重要的,这一点在以后我们深入到router.php内部的时候就非常清楚了。


JRouter生成URL的过程分为两个步骤

创建application route:

appliction route 完全由JRouter处理,组件开发者不必做任何事情。

创建component route

为了创建component route, JRouter查找组件目录中 router.php,router.php负责构造组件的route.


router.php

router.php中通常有两个函数。一个负责构造URL,另一个负责解析,接下来请看两个例子:假设有单个views,其中一是view=categories,第二个是view=category,第三个是view=article。


简单例子,这个例子简单实现了组件的自定义URL

function [Componentname]BuildRoute( &$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;
}

JRouter传递$query数组到[Componentname]BuildRoute函数中,这个函数将$query的对应内容按一定的顺序填充$segments数组,而$query数组的相应内容被清空,其余$query为被清除的部分将作为query字串传递给router.

router.php中另一个函数解析URL

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;
}

[Componentname]BuildRoute函数以指定的顺序组织$query中的项,也就是说在这个例子中第一是view,第二是catid,第三是id
,$vars数组返回给JRouter,$var一定程度上与传递给BuildRoute的数组是相似的。

相关文章:
自定义URL(下)


收藏此文章:
Digg! Reddit! Del.icio.us! JoomlaVote! Google! Live! Facebook! StumbleUpon! Yahoo! Free social bookmarking plugins and extensions for Joomla! websites!

发表您的文章评论

您的姓名 (昵称)
标题:
评分: 很差一般较好很好
评论:
验证码:
请输入验证码