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