Уточнить пользовательские URL-адреса в Magento

В настоящее время я пытаюсь создать пользовательские URL-адреса / маршрутизацию с помощью magento, в настоящее время я установил маршрут по умолчанию в config.xml в локальном модуле.

<frontend> <routers> <portfolios> <use>standard</use> <args> <module>Custom_Portfolios</module> <frontName>portfolios</frontName> </args> </portfolios> </routers> <default> <router>portfolios</router> </default> </frontend> 

В настоящее время он работает с URL-адресом / portfolios / index / action / custom-string, который является маршрутом по умолчанию magento. То, что я пытаюсь достичь, состоит в том, чтобы иметь /portfolios/custom-string.html. Я попытался использовать правило mod_rewrite без каких-либо успехов, я нашел некоторые ссылки относительно использования пользовательского суффикса .html, который я добавил в тот же файл config.xml.

 <default><portfolios><seo><portfolios_url_suffix>.html</portfolios_url_suffix></seo></portfolios></default> 

Я просмотрел документы aan storm storm по отношению к маршрутизации и нашел, что это релевантно только маршрутам маршрутизации по умолчанию, или информация немного устарела.

Вы знаете лучший способ контролировать маршрутизацию в magento с помощью, возможно, простого и уместного учебника? если да, пожалуйста, поделитесь: D many

Solutions Collecting From Web of "Уточнить пользовательские URL-адреса в Magento"

Способ сделать это с помощью перезаписи URL. Фактически, найденная конфигурация суффикса, вероятно, используется Mage_Catalog для создания наборов перезаписи. Я впервые подхожу к этой конкретной функции, поэтому этот фрагмент должен быть взят с щепоткой соли …

 // Creating a rewrite /* @var $rewrite Mage_Core_Model_Url_Rewrite */ $rewrite = Mage::getModel('core/url_rewrite'); $rewrite->setStoreId($store_id) ->setIdPath('portfolios/'.$url_key) ->setRequestPath('portfolios/'.$url_key.'.html') ->setTargetPath('portfolios/index/action/id/'.$url_key) ->setIsSystem(true) ->save(); 

Для каждого возможного пути требуется новый переписать.

Редактировать; Я добавил setIdPath потому что это может быть необходимо.

Код ниже не проверен, но должен работать

Если вы не хотите определять персонализированную переписку для каждого элемента действия, выполните следующие действия:

  1. Напишите свой собственный класс маршрутизатора, расширенный от Mage_Core_Controller_Varien_Router_Standard, и реализуйте метод соответствия:

     public function match(Zend_Controller_Request_Http $request) { $path = explode('/', trim($request->getPathInfo(), '/')); // If path doesn't match your module requirements if (count($path) > 2 && $path[0] != 'portfolios') { return false; } // Define initial values for controller initialization $module = $path[0]; $realModule = 'Custom_Portfolios'; $controller = 'index'; $action = 'action'; $controllerClassName = $this->_validateControllerClassName( $realModule, $controller ); // If controller was not found if (!$controllerClassName) { return false; } // Instantiate controller class $controllerInstance = Mage::getControllerInstance( $controllerClassName, $request, $this->getFront()->getResponse() ); // If action is not found if (!$controllerInstance->hasAction($action)) { return false; // } // Set request data $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action); $request->setControllerModule($realModule); // Set your custom request parameter $request->setParam('url_path', $path[1]); // dispatch action $request->setDispatched(true); $controllerInstance->dispatch($action); // Indicate that our route was dispatched return true; } 
  2. Определите свой настраиваемый маршрутизатор в файле config.xml:

     <stores> <default> <web> <routers> <your_custom> <area>frontend</area> <class>Custom_Portfolios_Controller_Router_Custom</class> </your_custom> </routers> </web> </default> </stores> по <stores> <default> <web> <routers> <your_custom> <area>frontend</area> <class>Custom_Portfolios_Controller_Router_Custom</class> </your_custom> </routers> </web> </default> </stores> по <stores> <default> <web> <routers> <your_custom> <area>frontend</area> <class>Custom_Portfolios_Controller_Router_Custom</class> </your_custom> </routers> </web> </default> </stores> 
  3. Наслаждайтесь своей собственной маршрутизацией в Magento 🙂

Самый простой способ (когда вам не нужно автоматически генерировать много URL-адресов) – использовать встроенный модуль Url Rewrites. Перейти к админ-серверу -> Каталог -> Url Переписать управление и настроить любой URL-адрес, который вам нравится.