Domanda

Attualmente sto guardando cercando di generare URL personalizzati / routing con Magento, attualmente ho impostato un percorso predefinito in config.xml all'interno del modulo locale.

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

Questa Attualmente collabora con il sentiero URL del / portafogli / index / action / custom-string che è il percorso di default di Magento. Quello che sto cercando di realizzare è quello di avere /portfolios/custom-string.html Ho tentato di utilizzare una regola mod_rewrite senza successo, ho trovato alcuni riferimenti in relazione ad utilizzare un suffisso personalizzato di .html che ho aggiunto alla stesso file config.xml.

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

Ho guardato la documentazione alan tempesta in relazione di routing e l'ho trovato relevent al default di routing solo i percorsi o le informazioni è un po 'fuori-datato.

Non si conosce il metodo migliore per controllare il routing all'interno di Magento, probabilmente, un facile da seguire e un'esercitazione relevent? in tal caso si prega di condividere: D molti

È stato utile?

Soluzione

Il modo per farlo è con una riscrittura degli URL. In realtà, la configurazione suffisso che avete trovato è probabilmente utilizzato da Mage_Catalog per crearlo di serie di riscritture. Mi sto avvicinando questa particolare caratteristica per la prima volta in modo da questo frammento dovrebbe essere preso con un pizzico di sale ...

// 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();

Una nuova riscrittura è necessaria per ogni possibile percorso.

Modifica;. Ho una setIdPath perché potrebbe essere necessario

Altri suggerimenti

codice qui sotto non è testato, ma dovrebbe funzionare

Se non si desidera definire personalizzati riscrivere per ogni elemento protfolio, basta seguire questi passi:

  1. Scrivi la classe di router personalizzato esteso da Mage_Core_Controller_Varien_Router_Standard e implementare il metodo 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. Definisci il router personalizzato in 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. Godetevi la vostra abitudine di routing in Magento:)

Il metodo più semplice (quando non c'è bisogno di generare automaticamente gli URL molti) è quello di utilizzare il modulo incorporato URL riscrive. Vai a admin backend -> Catalogo -.> Gestione URL Rewrite e impostare qualsiasi URL riscrivere come

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top