Вопрос

В настоящее время я смотрю на попытку создать пользовательские 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 Path / 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>

Я посмотрел на Alan Storm Docs по отношению к маршрутизации и обнаружил, что это имеет значение только к путям маршрутизации по умолчанию, или информация немного устарела.

Знаете ли вы лучший метод для управления маршрутизацией в Magento, возможно, легко следовать и первоначальный учебник? Если это так, пожалуйста, поделись: D Многие

Это было полезно?

Решение

Способ сделать это с Rewrite 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 потому что это может быть необходимо.

Другие советы

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

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

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

    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>
    
  3. Наслаждайтесь вашим пользовательским маршрутом в Magento :)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top