Panier Panier 0 Produit Produits (vide)

Aucun produit

Total produits HT
À définir Total frais de port HT
0,00 € Total HT
0,00 € TVA
0,00 € Total TTC

Commander

Produit ajouté au panier avec succès
Quantité
Total
Il y a 0 produits dans votre panier. Il y a 1 produit dans votre panier.
Total produits (HT)
Frais de port (HT) À définir
Total (HT)
TVA : 0,00 €
Total (TTC) : 0,00 €
Continuer mes achats Commander

Dur, dur la MAJ 1.5.3 de la fin d'année 2013... La migration 1.5.2 vers 1.5.3 échoue, le temps de trouver pourquoi, une mise à jour 1.5.3.1 est mise en ligne le 31/12/2012 après-mdi. Au programme, des correctifs de la 1.5.3, avec notamment la gestion des url sans caractères accentués (l'article concernant Prestashop 1.5.2 et ses caractères accentués s'en trouve donc caduque, si vous faîtes la MAJ).

Non sans péripéties, la migration manuelle (si je trouve le temps, je rédigerais un article précisant, avec un vécu utilisateur, comment procéder) fonctionne.

Un test des modules, une comparasion des overrides avec les classes existantes et on vient rapidement au problème de l'article ; les URL jusqu'alors propres en matière de référencement (savoir une route sous la forme {id}-{rewrite}.html en ce qui concerne les produits) se retrouve {category}/{id}-{rewrite}.html, alors même que les routes SEO n'ont pas été modifiées !

Vite fait, bien fait, je vous fait part de l'override à réaliser du fait de l'ineptie de la classe Dispatcher de la version 1.5.3.1 de Prestashop ; on charge les routes, et à la fin, on écrit ce beau paramétrage utilisateur par les routes par défaut !

Voici donc la surcharge à réaliser dans le fichier override/classes/Dispatcher.php

/**
 * Load default routes group by languages
 */
protected function loadRoutes()
{
    $context = Context::getContext();
     
    // Load custom routes from modules
    $modules_routes = Hook::exec('moduleRoutes', array(), null, true, false);
    if (is_array($modules_routes) && count($modules_routes))
    foreach($modules_routes as $module_route)
      foreach($module_route as $route => $route_details)
        if (array_key_exists('controller', $route_details) && array_key_exists('rule', $route_details)
          && array_key_exists('keywords', $route_details) && array_key_exists('params', $route_details))
          {
              if (!isset($this->default_routes[$route]))
                $this->default_routes[$route] = array();
              $this->default_routes[$route] = array_merge($this->default_routes[$route], $route_details);
            }      
     
    // Set default routes
    foreach (Language::getLanguages() as $lang)
        foreach ($this->default_routes as $id => $route)
            $this->addRoute(
                $id,
                $route['rule'],
                $route['controller'],
                $lang['id_lang'],
                $route['keywords'],
                isset($route['params']) ? $route['params'] : array()
            );
 
    if ($this->use_routes)
    {
        // Get iso lang
        $iso_lang = Tools::getValue('isolang');
        $id_lang = $context->language->id;
        if (!empty($iso_lang))
            $id_lang = Language::getIdByIso($iso_lang);
 
        // Load routes from meta table
        $sql = 'SELECT m.page, ml.url_rewrite, ml.id_lang
                FROM `'._DB_PREFIX_.'meta` m
                LEFT JOIN `'._DB_PREFIX_.'meta_lang` ml ON (m.id_meta = ml.id_meta'.Shop::addSqlRestrictionOnLang('ml').')
                ORDER BY LENGTH(ml.url_rewrite) DESC';
        if ($results = Db::getInstance()->executeS($sql))
            foreach ($results as $row)
            {
                if ($row['url_rewrite'])
                    $this->addRoute($row['page'], $row['url_rewrite'], $row['page'], $row['id_lang']);
            }
 
        // Set default empty route if no empty route (that's weird I know)
        if (!$this->empty_route)
            $this->empty_route = array(
                'routeID' => 'index',
                'rule' =>        '',
                'controller' =>  'index',
            );
 
        // Load custom routes
        foreach ($this->default_routes as $route_id => $route_data)
            if ($custom_route = Configuration::get('PS_ROUTE_'.$route_id))
                foreach (Language::getLanguages() as $lang)
                    $this->addRoute(
                        $route_id,
                        $custom_route,
                        $route_data['controller'],
                        $lang['id_lang'],
                        $route_data['keywords'],
                        isset($route_data['params']) ? $route_data['params'] : array()
                    );
    }
}



Publié le 02/01/2013 dans Astuces Prestashop version 1.5

COMMENTAIRES

Aucun commentaire pour le moment.

Ajouter un commentaire