Supprimer le sous-dossier /fr/ dans Prestashop 1.4

Lorsque vous utilisez Prestashop en mode multi-langue, les adresses/urls sont écrites de la façon suivante :
https://www.boutique-prestashop.com/iso/fichier.php
Donc cela donne :
https://www.boutique-prestashop.com/fr/fichier.php pour le français.
https://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 :
https://www.boutique-prestashop.com/fichier.php pour le français.
https://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 https://www.boutique-prestashop.com/ au lieu de https://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]’;
}

14 commentaires sur “Supprimer le sous-dossier /fr/ dans Prestashop 1.4”

  1. Bonjour,
    cet article est très intéressant, pour aller plus loin et personnaliser complétement les url de toutes les pages, nous avons développé un module pour faciliter cela avec la version 1.4 de Prestashop.
    Grâce à ce module (URL rewriting+) vous pouvez personnaliser l’url en enlevant les n° de produit, catégories, cms ou encore faire disparaitre la langue de l’url.
    Le module est facile à mettre en oeuvre avec simplement les variable disponible à intégrer ou non dans l’url et aussi dans l’ordre que l’on souhaite.

  2. 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 =)

  3. 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 😉

  4. 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

  5. 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.

  6. 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

  7. 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.

  8. First off I want to ay wonderful bl g! Ihad a quick qesotiun which I’d like to ask if you don’t mind.I was nterested to know how you cente you s lf and lea your mind before writing.I’ve had a tough time clearing my thoughts in getting my ideas out. I truly do take pleasure in writing however it just seems like the first 10 to 15 minutes tend to be lost just trying to figure out how to begin. Any recommendations or tips? Many thanks!

  9. she was the easiest for her to utnarsdend the concepts and really excited her to try and get started.By the way, when doing your research, be warned that affiliate marketing educational websites are usually trying to sell you something and can be VERY persuasive. Try not to buy anything if you can help it unless you are 100% ready to proceed and the seller has a minimum of a 30 day return policy so you have ample time to really review it. I’ve spent thousands on my education to build my affiliate business and can tell you that if you work at it consistently, it can be done.Good luck!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *