给梦一个奔跑的方向!
PDF Print E-mail
User Rating: / 0
PoorBest 
Written by xlingfairy
Sunday, 29 March 2009 11:43
一开始还以为只有 joomla 自带的 功能才有 重写 url 的功能,但是自从上次看了一个 第三方 component 也可以做到的时候,我就急着把 自己写的 component 也给加上重写 url 功能。于是有了:给APACHE加上URLRewrite 功能的问题
 
 
其实,很简单,只需要一个 router.php 就足以。
这个文件,只需要两个函数: 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
 

Add comment


Security code
Refresh

Popular Contents

Recommend

Site Info

Members : 1
Content : 130
Web Links : 7
Content View Hits : 99647

Links