通过controller进行url重写

来源:互联网 发布:视频软件排名 编辑:程序博客网 时间:2024/05/29 15:15

改功能是将http://www.sample.com/tag/product/list/tagId/2,重写成http://www.sample.com/tag/2!

1

通过controller,具体详细原理我也说不清楚,大致是通过抓取一个事件来进行的!!

这个事件就是controller_front_init_routers,然后把填写

 

<events>
            <controller_front_init_routers>
                <observers>
                    <tag>
                        <type>singleton</type>
                        <class>Mage_Tag_Controller_Router</class>
                        <method>initControllerRouters</method>
                    </tag>
                </observers>
            </controller_front_init_routers>
        </events>

 

2

写Controller,譬如:


class Mage_Tag_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract
{
    public function initControllerRouters($observer)
    {
        $front = $observer->getEvent()->getFront();

        $tag = new Mage_Tag_Controller_Router();
        $front->addRouter('tag', $tag);
    }

    public function match(Zend_Controller_Request_Http $request)
    {
   

            $pageId = $request->getPathInfo();
             Mage::register('paramsttt', $pageId);
            $request->setModuleName('tag')
                ->setControllerName('product')
                ->setActionName('list');
                return true;
       
       
       
    }
}

如果执行url:/tag/tagid,就会执行这个controller,然后将paramsttt赋值于/tag/tagid,

然后呢,在执行/tag/product/list这个url(相当于),然后再这个controllers接受这个参数

$paramas = Mage::registry('paramsttt');

然后通过字符串函数

$ss = explode('/', $paramas);
      
        $tagName =$ss['2'];

就可以得到tagid这个字符串,然后执行到的controller和得到的参数都有了,从而实现了重写!!!

 

3.在指向原来url需要改变成上面的修改完毕的url,也就是重写后的url,然后点击后,就通过上面的方式执行了!!