Lorsque vous utilisez Prestashop en mode multi-langue, les adresses/urls sont écrites de la façon suivante :
http://www.boutique-prestashop.com/iso/fichier.php

Donc cela donne :
http://www.boutique-prestashop.com/fr/fichier.php pour le français.
http://www.boutique-prestashop.com/en/fichier.php pour l’anglais.
Et ainsi de suite.

Nous vous conseillons de garder ce fonctionnement, mais si vous avez déjà référencé votre boutique sans le /fr/pour la langue française et que vous ne voulez pas perdre votre position sur les moteurs de recherche, nous vous proposons une solution pour modifier le comportement de Prestashop.
Vous aurez donc un système d’adresse de la manière suivante :
http://www.boutique-prestashop.com/fichier.php pour le français.
http://www.boutique-prestashop.com/en/fichier.php pour l’anglais.

La modification nécessite des changements dans les fichiers systèmes de Prestashop. A ne faire que si vous savez ce que vous faites ! Pensez à sauvegarder l’ensemble des fichiers que vous allez modifier avant.

Voici la liste des changements :
Dans la classe Link.php, chercher la méthode nommé “getLangLink”.
Initialement la méthode se termine par cela :

return Language::getIsoById((int)$id_lang).’/';

Modifier comme ceci :

if(Language::getIsoById((int)$id_lang) == ‘fr’)
return ”;

return Language::getIsoById((int)$id_lang).’/';

Cette modification aura pour but de modifier l’ensemble des urls utilisées par Prestashop, pour supprimer le sous-dossier “fr”.

Dans la classe Frontcontroller.php, chercher la méthode “init”
Puis chercher le code suivant :

// Switch language if needed and init cookie language
if ($iso = Tools::getValue(’isolang’) AND Validate::isLanguageIsoCode($iso) AND ($id_lang = (int)(Language::getIdByIso($iso))))
$_GET['id_lang'] = $id_lang;

Puis remplacer-le par :

// Switch language if needed and init cookie language
if ($iso = Tools::getValue(’isolang’) AND Validate::isLanguageIsoCode($iso) AND ($id_lang = (int)(Language::getIdByIso($iso))))
$_GET['id_lang'] = $id_lang;
else
$_GET['id_lang'] = (int)(Language::getIdByIso(’fr’));

Pour faire le changement de langage, Prestashop utilisé le “fr” contenu dans l’url. Vu qu’il n’y sera plus, nous lui expliquons que si la langue n’est pas précisé dans l’url, alors la langue est le français.

Dans votre template modifier le fichier header.tpl. Au niveau du logo, cherchez :

<a title=”{$shop_name|escape:’htmlall’:'UTF-8′}” href=”{$base_dir}”>

Et remplacez par :

<a href=”{$link->getPageLink(’index.php’)}” title=”{$shop_name|escape:’htmlall’:'UTF-8′}”>

Le but de cette modification est simplement d’avoir toujours l’adresse correct en fonction du langage pour la page index. Par défaut, pour l’anglais, l’adresse sera http://www.boutique-prestashop.com/ au lieu de http://www.boutique-prestashop.com/en/

Dans le fichier modules/gsitemap/gsitemap.php, cherchez :

foreach($langs as $lang)
$this->_addSitemapNode($xml, Tools::getShopDomain(true, true).__PS_BASE_URI__.$lang['iso_code'].’/', ‘1.00′, ‘daily’, date(’Y-m-d’));

Et remplacez par :

foreach($langs as $lang)
if($lang['iso_code']==’fr’)
$this->_addSitemapNode($xml, Tools::getShopDomain(true, true).__PS_BASE_URI__, ‘1.00′, ‘daily’, date(’Y-m-d’));
else
$this->_addSitemapNode($xml, Tools::getShopDomain(true, true).__PS_BASE_URI__.$lang['iso_code'].’/', ‘1.00′, ‘daily’, date(’Y-m-d’));

Le module de sitemap écrit toutes les urls suivies du code iso au début du fichier généré. Le but est de supprimer l’url avec le sous-dossier “fr” puisque celui-ci ne doit plus exister.

Enfin, ouvrez la classe Tools.php, trouvez la méthode generateHtaccess.
Chercher le code suivant :

foreach (Meta::getMetasByIdLang($language['id_lang']) as $key => $meta)
if (!empty($meta['url_rewrite']) AND Validate::isLinkRewrite($meta['url_rewrite']))
$tab['RewriteRule']['content']['^'.$language['iso_code'].’/’.$meta['url_rewrite'].’$'] = $meta['page'].’.php?isolang=’.$language['iso_code'].’ [QSA,L]‘;
elseif (array_key_exists($key, $default_meta) && $default_meta[$key]['url_rewrite'] != ”)
$tab['RewriteRule']['content']['^'.$language['iso_code'].’/’.$default_meta[$key]['url_rewrite'].’$'] = $default_meta[$key]['page'].’.php?isolang=’.$language['iso_code'].’ [QSA,L]‘;
$tab['RewriteRule']['content']['^'.$language['iso_code'].’/([^?&]*)’] = ‘$1?isolang=’.$language['iso_code'].’ [QSA,L]‘;

Et remplacez par :

if($language['iso_code'] ==’fr’){
foreach (Meta::getMetasByIdLang($language['id_lang']) as $key => $meta)
if (!empty($meta['url_rewrite']) AND Validate::isLinkRewrite($meta['url_rewrite']))
$tab['RewriteRule']['content']['^'.$meta['url_rewrite'].’$'] = $meta['page'].’.php?isolang=’.$language['iso_code'].’ [QSA,L]‘;
elseif (array_key_exists($key, $default_meta) && $default_meta[$key]['url_rewrite'] != ”)
$tab['RewriteRule']['content']['^'.$default_meta[$key]['url_rewrite'].’$'] = $default_meta[$key]['page'].’.php?isolang=’.$language['iso_code'].’ [QSA,L]‘;

}else{
foreach (Meta::getMetasByIdLang($language['id_lang']) as $key => $meta)
if (!empty($meta['url_rewrite']) AND Validate::isLinkRewrite($meta['url_rewrite']))
$tab['RewriteRule']['content']['^'.$language['iso_code'].’/’.$meta['url_rewrite'].’$'] = $meta['page'].’.php?isolang=’.$language['iso_code'].’ [QSA,L]‘;
elseif (array_key_exists($key, $default_meta) && $default_meta[$key]['url_rewrite'] != ”)
$tab['RewriteRule']['content']['^'.$language['iso_code'].’/’.$default_meta[$key]['url_rewrite'].’$'] = $default_meta[$key]['page'].’.php?isolang=’.$language['iso_code'].’ [QSA,L]‘;
$tab['RewriteRule']['content']['^'.$language['iso_code'].’/([^?&]*)’] = ‘$1?isolang=’.$language['iso_code'].’ [QSA,L]‘;
}

11 commentaires pourquoi ne pas laisser le vôtre ?

Nous n'apporterons pas de support par commentaire pour un problème technique avec l'un de nos modules. Merci de nous contacter directement avec notre formulaire de contact!

Tutorial nickel et performant. Juste une précision, le, copié/collé du code peut modifier les quotes ‘ et ” sous mac. Il est conseillé de vérifier.

Sébastien le 1 avril 2014 à 15 h 23 min

Est-ce possible d’avoir la même chose pour la 1.5.4 svp ?

james le 10 décembre 2013 à 1 h 27 min

Bonjour,

Tuto parfait merci, mais mes liens FR (uniquement) vers les fiches produits me redirige vers une erreur 404.
La version EN est OK
Ckarone

ckarone le 30 mars 2012 à 10 h 35 min

Bonjour,

je viens d’acheter URL Rewriting + via adds on sans savoir que vous étiez les développeurs.

Ma question est la suivante: est - il utile avant d’installer ou de configurer URL Rewriting +, de faire une manip au niveau de la fonction proposée par défaut dans 1.4.

Lors de mon installation en local sur wamp, j’ai eu un bug à cause de l’activation de la fonction intégrée, ou à cause du htaccess, que je n’ai pas réussi à réparer et j’ai du tout réinstaller.

Le site est maintenant sur serveur, mais je préfère vous demander pour prendre mes précautions.

Merci d’avance pour votre réponse, je l’attends avant d’installer URL Rewriting +.

Cordialement.

Jeff le 2 février 2012 à 17 h 30 min

bonjour, j’ai tenté d’appliquer cette methode mais je recois le message d’erreur suivant:
Parse error: syntax error, unexpected ‘$’, expecting ‘]’ in /var/www/vhosts/monsite.com/httpdocs/classes/Tools.php on line 1730.
comment puis je remedié a cela
merci

olivier le 27 novembre 2011 à 14 h 28 min

Ecrire un commentaire