2014-04-08 2 views
-1

Я создал модуль и попытаться переписать URL с помощью config.xmlMagento config.xml URL Rewrite

Мой URL: http://www.domain.com/mymodule/index/bestseller

Я хочу URL быть:

http://www.domain.com/bestseller 

Ниже это мой xml-код:

<rewrite> 
      <products_rewrite> 
       <from><![CDATA[/\/(.*)/]]></from> 
       <to><![CDATA[mymodule/index/$1/]]></to> 
       <complete>1</complete> 
      </products_rewrite> 
     </rewrite> 

это правило URL-адреса config.xml работает, но оно сломало все остальные u rl, все остальные URL-адреса на сайте возвращают ошибку 404. Кто-нибудь может мне помочь?

ответ

2

Вы можете создать настраиваемый маршрутизатор для этого в своем модуле.

Добавьте к этому config.xml внутри тега <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> 

Теперь вам нужно создать класс маршрутизатора.

в 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; 
    } 
} 

Очистите кэш и отпустите его.

+0

У меня есть еще один вопрос, я на самом деле сервер URL нужно переписать, например, MyModule/индекс/бестселлера, MyModule/индекс/специальные, MyModule/индекс/последний, mymodule/index/featured и т. д., как я могу это сделать? – user1579524

+0

Используйте тот же самый код и просто создайте оператор 'switch' на' $ parts [0] 'и в зависимости от его значения вы можете перенаправить внутренне на правильное действие. – Marius

+0

Я отредактировал ответ и добавил другой случай, когда URL-адрес является «специальным». Вы можете сделать то же самое для последних и признанных – Marius

1

я, наконец, использовать разнесенные переписывает так:

 <rewrite> 
     <rewrite_latest> 
      <from><![CDATA[#^/latest.html#]]></from> 
      <to><![CDATA[/mymodule/index/latest]]></to> 
      <complete>1</complete> 
     </rewrite_latest> 
     <rewrite_popular> 
      <from><![CDATA[#^/popular.html#]]></from> 
      <to><![CDATA[/mymodule/index/popular]]></to> 
      <complete>1</complete> 
     </rewrite_popular> 
     <rewrite_special> 
      <from><![CDATA[#^/special.html#]]></from> 
      <to><![CDATA[/mymodule/index/special]]></to> 
      <complete>1</complete> 
     </rewrite_special> 
     <rewrite_bestseller> 
      <from><![CDATA[#^/bestseller.html#]]></from> 
      <to><![CDATA[/mymodule/index/bestseller]]></to> 
      <complete>1</complete> 
     </rewrite_bestseller> 
     <rewrite_featured> 
      <from><![CDATA[#^/featured.html#]]></from> 
      <to><![CDATA[/mymodule/index/featured]]></to> 
      <complete>1</complete> 
     </rewrite_featured> 
    </rewrite> 

это работает, но выглядит не очень хорошо, если кто-нибудь имеет лучшие решения, пожалуйста, дайте мне знать.

-1

код из config.xml

<global> 
    <rewrite> 
     <designer_url> 
      <from><![CDATA[#^/author/id/$#]]></from> 
      <to><![CDATA[/designer/index/index/id/$1]]></to> 
      <complete>1</complete> 
     </designer_url> 
    </rewrite> 
</global> 
Смежные вопросы