MadFlasher Posted May 13, 2013 Share Posted May 13, 2013 Bonjour, La boutique est en 1.5.4.1, langues fr et gb installées Je suis en phase de test et je viens de regarder un peu le contenu des sitemap généré Mis à par les fiches produits qui sont OK, tout les autres liens renvoient vers un 404 exemple sitemap : racine/fr/best-sales (fichier fr) racine/gb/best-sales (fichier gb) url correcte : /fr/meilleures-ventes /gb/meilleures-ventes Je ne comprend pas bien d'où vient le souci D'avance merci pour vos conseils avisés Stéph Link to comment Share on other sites More sharing options...
emily_d Posted May 29, 2013 Share Posted May 29, 2013 (edited) Je confirme le bug. En plus ces liens mi-anglais mi-français sont en https si le SSL est activé. Je vais jeter un coup d'oeil dans le code du module. EDIT En fait l'url_rewrite est selectionné sans que la langue soit précisée, alors la première valeur est utilisée. Cela a l'air de fonctionner en modifiant (l.183 de gsitemap.php) $url_rewrite = Db::getInstance()->getValue('SELECT url_rewrite FROM `'._DB_PREFIX_.'meta_lang` WHERE `id_meta` = '.(int)$meta['id_meta']); par $url_rewrite = Db::getInstance()->getValue('SELECT url_rewrite FROM `'._DB_PREFIX_.'meta_lang` WHERE `id_meta` = '.(int)$meta['id_meta'] . ' AND `id_lang` = ' . (int) $lang['id_lang']); J'ai ajouté : ' AND `id_lang` = ' . (int) $lang['id_lang'] pour que l'url_rewrite soit dans la bonne langue. Pour le problème du SSL, il faut changer (la home page n'a pas à être en SSL) : private function _getHomeLink(&$link_sitemap, $lang, &$index, &$i) { //return $this->_addLinkToSitemap($link_sitemap, array('type' => 'home', 'page' => 'home', 'link' => 'http'.(Configuration::get('PS_SSL_ENABLED') ? 's' : '').'://'.Tools::getShopDomain(false, true).__PS_BASE_URI__, 'image' => false), $lang['iso_code'], $index, $i, -1); return $this->_addLinkToSitemap($link_sitemap, array('type' => 'home', 'page' => 'home', 'link' => 'http://'.Tools::getShopDomain(false, true).__PS_BASE_URI__, 'image' => false), $lang['iso_code'], $index, $i, -1); } Remplacer : $url = (Configuration::get('PS_SSL_ENABLED') ? Tools::getShopDomainSsl(true) : Tools::getShopDomain(true)); par $url = 'http://'.Tools::getShopDomain(false, true); Le seul problème que cela pose c'est pour les pages qui doivent être en SSL comme la page contact (mais doivent-elles vraiment faire partie d'un sitemap ?). Pour que cela soit vraiment propre il faudrait savoir si pour chaque page le SSL est activé ou pas. D'après moi ce n'est pas évident à faire, car le SSL est activé dans les controllers par l'utilisation d'une variable public $ssl = true;donc à moins de parser tous les controllers on ne peut pas récupérer cette variable. Ou il faudrait pouvoir créer une instance de controller et en extraire la variable. Du genre : $contact_controller = new ContactControllerCore(); $contact_controller->ssl; ça a l'air de marcher... maintenant récupérer le nom de chaque controller via une fonction : function getControllerClassName($url_rewrite) { //could be more efficient with a loop $url_rewrite = str_replace("-", " ", $url_rewrite); $url_rewrite = ucwords($url_rewrite); $url_rewrite = str_replace(" ", "", $url_rewrite); return $url_rewrite . "ControllerCore"; } Et en plus pour que ça marche vraiment il ne faudrait pas utiliser $url_rewrite mais la valeur de la requête : SELECT page FROM ps_meta; Et faire un traitement différent pour les modules... Pour résumer, il faudrait quelque chose qui ressemble à ça : $page = Db::getInstance()->getValue('SELECT page FROM `'._DB_PREFIX_.'meta` WHERE `id_meta` = '.(int)$meta['id_meta']); if(!empty($page)) { //could be more efficient with a loop if(substr($page, 0, strlen("module-")) === "module-") { $page = str_replace("module-", "", $page); $page = str_replace("-", " ", $page); $page = ucwords($page); $page = str_replace(" ", "", $page); $page .= "ModuleFrontController"; } else { $page = str_replace("-", " ", $page); $page = ucwords($page); $page = str_replace(" ", "", $page); $page .= "ControllerCore"; } $controller = new $page(); //$controller->ssl => Tools::getShopDomainSsl(true) } Mais quid des modules qui ont des noms mal cassés (sic) ? Et d'ailleurs cela ne semble pas marcher avec les modules... J'abandonne En plus je viens de me rendre compte que ssl est toujours false. Fini pour moi Edited May 29, 2013 by emily_d (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now