改功能是將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,然後點擊後,就通過上面的方式執行了!!