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 :
Modifier comme ceci :
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 :
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 :
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 :
Et remplacez par :
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 :
$this->_addSitemapNode($xml, Tools::getShopDomain(true, true).__PS_BASE_URI__.$lang['iso_code'].’/', ‘1.00′, ‘daily’, date(’Y-m-d’));
Et remplacez par :
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 :
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 :
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]‘;
}













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.
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
Merci pour cet article très utile, bien écrit, juste et précis !
Beau travail.
Merci encore
Disons que l’article a pour but d’aider l’utilisateur à le mettre en place en indiquant où trouver le code et comment le modifier.
Si nous avions utiliser les overrides, cela n’aidait pas vraiment à comprendre quelle partie du code était visée (ou alors il aurait fallu vraiment détailler chaque étape).
Bref, c’est en effet la meilleure pratique à utiliser
Salut merci pour l’article qui m’a bien aidé, cependant tu aurais pu utiliser des overrides pour tes modifications, chose possible depuis la 1.4 de prestashop.
Mais merci encore =)