您可以爲您的模塊創建一個自定義路由器。
這給3210添加<global>
標籤
<events>
<controller_front_init_routers>
<observers>
<[namespace]_[module]>
<class>[Namespace]_[Module]_Controller_Router</class>
<method>initControllerRouters</method>
</[namespace]_[module]>
</observers>
</controller_front_init_routers>
</events>
現在,您需要創建路由器類中。
in app/code/local/[Namespace]/[Module]/Controller/Router.php
把以下代碼:(注意:文件夾名稱是Controller
- 不要與controllers
混淆)。
<?php
class [Namespace]_[Module]_Controller_Router
extends Mage_Core_Controller_Varien_Router_Abstract {
public function initControllerRouters($observer){
$front = $observer->getEvent()->getFront();
$front->addRouter('[namspace]_[module]', $this);
return $this;
}
public function match(Zend_Controller_Request_Http $request){
if (!Mage::isInstalled()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect(Mage::getUrl('install'))
->sendResponse();
exit;
}
$urlKey = trim($request->getPathInfo(), '/');
$parts = explode('/', $urlKey);
if ($parts[0] == 'bestseller'){ //if the route matches 'bestseller' then internal redirect to the module
$request->setModuleName('[modulename]') //set module name
->setControllerName('index') //set controller
->setActionName('bestseller'); //set action
$request->setAlias(
Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
$urlKey
);
return true;
}
if ($parts[0] == 'special'){ //if the route matches 'special' then internal redirect to the module
$request->setModuleName('[modulename]') //set module name
->setControllerName('index') //set controller
->setActionName('special'); //set action
$request->setAlias(
Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
$urlKey
);
return true;
}
return false;
}
}
清除緩存,並給它一個去。
我還有一個問題,其實我有服務器的URL需要重寫,例如,MyModule的/指數/暢銷書,MyModule的/指數/特殊,MyModule的/索引/最新的,mymodule/index/featured等。我該怎麼做? – user1579524
使用上面相同的代碼,只需在'$ parts [0]'上做一個'switch'語句,根據它的值,你可以在內部重定向到正確的動作 – Marius
我已經編輯了答案,並添加了另外一種情況, url密鑰是'special'。你可以做同樣的最新和功能 – Marius