改功能是将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,然后点击后,就通过上面的方式执行了!!