一开始还以为只有 joomla 自带的 功能才有 重写 url 的功能,但是自从上次看了一个 第三方 component 也可以做到的时候,我就急着把 自己写的 component 也给加上重写 url 功能。于是有了:给APACHE加上URLRewrite 功能的问题
这个文件,只需要两个函数: xxxBuildRoute, xxxParseRoute, xxx 为component 的名称。
示例代码如下:
<?php
defined('_JEXEC') or die('Snow is pig ');
function MygalleryBuildRoute( &$query ){
$segments = array();
if(isset($query['task'])){
$segments[] = $query['task'];
unset($query['task']);
}else{
$segments[] = 'showCat';
}
if (isset($query['view'])) {
$segments[] = $query['view'];
unset($query['view']);
}
switch($segments[0]){//task
case 'gallery':
if(isset($query['gallery'])){
$segments[] = $query['gallery'];
unset($query['gallery']);
}
break;
case 'showCat':
if(isset($query['sec'])){
$segments[] = $query['sec'];
unset($query['sec']);
}
}
return $segments;
}
/**
* @param array
* @return array
*/
function MygalleryParseRoute( $segments ){
$vars = array();
$vars['task'] = $segments[0];
if(isset($segments[1]))
$vars['view'] = $segments[1];
switch ($segments[0]){//task
case 'gallery':
$vars['gallery'] = $segments[2];
break;
case 'showCat':
if(isset($segments[2]))
$vars['sec'] = $segments[2];
break;
}
return $vars;
}
注意,ParseRoute 函数里的 $segments 元素的下标要和 BuildRoute 函数下标的顺序一致。
segments 数组里的元素会按下标顺序组成重写后的 url
index.php?option=com_mygallery&view=list&sec=2&Itemid=10
被上面的函数重写之后就会返回:
http://my.dajiaozi.com/gallery/showCat/list/2.html
由于 Itemid 没有做处理,所以,就不不会出现在 重写后的URL里。
showCat 就是 segments 的第一个元素,即 task
list 是 segments[1] ,就也是 view
2 是 segments[2],就是那个 sec
另外,需要注意:
index.php?option=com_mygallery&view=list&sec=2&Itemid=10
不能写成:
/index.php?option=com_mygallery&view=list&sec=2&Itemid=10
如果写成了这样,这个地址就不会被重写了。
更新请参考:
http://docs.joomla.org/Routing
| < Prev | Next > |
|---|



