Вам нужно будет добавить собственный маршрутизатор в список маршрутизаторов, используемых Magento. Для этого вам нужно будет отредактировать свой файл etc/config.xml файл. После того, как вы определили ваши маршрутизаторы frontName в разделе :
<frontend>
<routers>
<modulename>
<use>standard</use>
<args>
<module>Package_Modulename</module>
<frontName>yourFrontName</frontName>
</args>
</modulename>
</routers>
</frontend>
Вы можете добавить свой собственный маршрутизатор с помощью событий в разделе:
<global>
<events>
<controller_front_init_routers>
<observers>
<your_observer_code>
<type>singleton</type>
<class>Package_Modulename_Controller_Router</class>
<method>initControllerRouters</method>
</your_observer_code>
</observers>
</controller_front_init_routers>
</events>
</global>
Затем создать этот файл по адресу: Пакет/Modulename/Controller/Router.php и он должен распространяться от: Mage_Core_Controller_Varien_Router_Abstract:
класс Package_Modulename_Controller_Router расширяет Mage_Core_Controller_Varien_Router_Abstract {
}
Определите метод, который будет вызываться на событие: controller_front_init_routers:
public function initControllerRouters($observer)
{
$front = $observer->getEvent()->getFront();
//Use the same class as Router
$yourRouter = new Package_Modulename_Controller_Observer();
$front->addRouter('yourRouter', $yourRouter);
}
И вы должны реализовать метод: матч в так же, как и Observer, это также ваш пользовательский маршрутизатор:
public function match(Zend_Controller_Request_Http $request)
{
if (!Mage::isInstalled()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect(Mage::getUrl('install'))
->sendResponse();
exit;
}
$identifier = trim($request->getPathInfo(), '/');
//Work with the $identifier and if it matches some of your custom defined URL's, you can set the found controller like this:
if ($identifier == 'some-of-yours/custom-urls') {
$request->setModuleName('modulename') //Your modulename
->setControllerName('index') //Your controller: Package_Modulename_IndexController
->setActionName('view') // The controller action
->setParam('foo', 'bar'); //Set params
$request->setAlias(
Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
$identifier
);
//You must return true if the identifier matches.
return true;
}
return false;
}
В методе сопоставления вы можете использовать модель своего модуля для поиска любых настраиваемых URL-адресов, хранящихся в базе данных. Посмотрите на этот маршрутизатор, как он работает: app/code/core/Mage/Cms/Controller/Router.php, который добавлен так же, как ваш.
Тогда в контроллере: приложение/код/местные/Упаковка/MODULENAME/Контроллеры/IndexController.php вы можете определить метод viewAction и использовать переданные параметры:
public function viewAction()
{
$foo = $this->getRequest()->getParam('foo');
//Here goes your logic
}