Jump to content

supprimer le sous dossier /fr de l'url au passage en multi-langue (v1.5)


Recommended Posts

Bonjour,

 

J'essaye (en vain jusqu'à présent) d'aider un ami qui a une boutique prestashop 1.5.

 

Son problème est le suivant :

- il a sa boutique qui tourne sur 1.5, et commence a etre bien référencé chez google et autres

- il a envie d'ajouter des langues (il n'était qu'en FR jusqu'à présent)

- à l'ajout d'une langue, un sous-dossier pour la langue s'ajoute (www.monsite.com/fr/mapage.php ou www.monsite.com/en/mapage.php)

 

J'ai cherché sur le net comment virer ça, et j'ai trouvé ce tuto pour presta 1.4:

http://www.magavenue.com/blog/prestashop/supprimer-sous-dossier-fr-prestashop-14

 

J'ai essayé de reproduire et adapter à la 1.5, mais sans succès...

 

J'ai modifié setCookieLanguage, switchLanguage, loadRoutes, et d'autres sans succès...

 

Si quelqu'un pouvait m'aider, ca serait super sympa!

 

Merci!!!!

Link to comment
Share on other sites

Bonjour Franck,

 

Merci pour la réponse... Mais n'existe pas une autre solution (même un module payant, je pense que mon ami serait ok pour payer un prix raisonnable)

 

Merci!!!

Link to comment
Share on other sites

  • 1 month later...
  • 4 months later...
  • 2 months later...
  • 1 month later...
  • 6 months later...

Bonjour,

Voici la solution pour une 1.5.x
De préférence, faites des override des classes modifiées.

Fichier classes/Link.php

 

Modifier

protected function getLangLink($id_lang = null, Context $context = null)
    {
        if (!$context)
            $context = Context::getContext();

        if (!$this->allow || !Language::isMultiLanguageActivated())
            return '';

        if (!$id_lang)
            $id_lang = $context->language->id;
        
        return Language::getIsoById($id_lang).'/';
    }

   
en
 

protected function getLangLink($id_lang = null, Context $context = null)
    {
        if (!$context)
            $context = Context::getContext();

        if (!$this->allow || !Language::isMultiLanguageActivated())
            return '';

        if (!$id_lang)
            $id_lang = $context->language->id;
        
        if(Language::getIsoById($id_lang)=='fr'){
            return '';
        }
        
        return Language::getIsoById($id_lang).'/';
    }


Fichier classes/Dispatcher.php

Modifier
 

protected function setRequestUri()
    {
        // Get request uri (HTTP_X_REWRITE_URL is used by IIS)
        if (isset($_SERVER['REQUEST_URI']))
            $this->request_uri = $_SERVER['REQUEST_URI'];
        else if (isset($_SERVER['HTTP_X_REWRITE_URL']))
            $this->request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
        $this->request_uri = rawurldecode($this->request_uri);
        
        $this->request_uri = preg_replace('#^'.preg_quote(Context::getContext()->shop->getBaseURI(), '#').'#i', '/', $this->request_uri);

        // If there are several languages, get language from uri
        if ($this->use_routes && Language::isMultiLanguageActivated())
            if (preg_match('#^/([a-z]{2})/#', $this->request_uri, $m))
            {
                $_GET['isolang'] = $m[1];
                $this->request_uri = substr($this->request_uri, 3);
            }
    }

en

protected function setRequestUri()
    {
        // Get request uri (HTTP_X_REWRITE_URL is used by IIS)
        if (isset($_SERVER['REQUEST_URI']))
            $this->request_uri = $_SERVER['REQUEST_URI'];
        else if (isset($_SERVER['HTTP_X_REWRITE_URL']))
            $this->request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
        $this->request_uri = rawurldecode($this->request_uri);
        
        $this->request_uri = preg_replace('#^'.preg_quote(Context::getContext()->shop->getBaseURI(), '#').'#i', '/', $this->request_uri);

        // If there are several languages, get language from uri
        if ($this->use_routes && Language::isMultiLanguageActivated())
            if (preg_match('#^/([a-z]{2})/#', $this->request_uri, $m))
            {
                $_GET['isolang'] = $m[1];
                $this->request_uri = substr($this->request_uri, 3);
            }else{
                $_GET['isolang'] = 'fr';
            }
    }

   
Fichier header.tpl (à adapter à votre thème)

Modifier

<a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}">

en
 

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

Je pense n'avoir rien oublié.


 

  • Like 2
Link to comment
Share on other sites

  • 4 months later...

Bonjour, j'ai le même problème mais sur presta 1.6, la solution est-elle la même? 

 

Il semblerait que lorsque j'essaye de changer de lange, puis de revenir à celle-ci la page re-charge, mais reste dans la deuxième langue. 

Link to comment
Share on other sites

Bonjour,

 

La solution n'est pas pareille, non, en 1.6. En cas, ce module le fera pour vous.

Salut,

Merci pour cette info. Ça m'intéresse :)

Je ne trouve pas très claires les explications sur le fonctionnement du module: Avec ce module, on choisit une langue (par exemple le Français) et les URL du site sont alors sans le dossier /fr/  quand le Français est sélectionné.

Si l'anglais est sélectionné, le dossier /en/ reste visible, c'est bien ça ?

Merci ;)

Link to comment
Share on other sites

Bonjour,

 

C'est justement "l'inverse", en fait. Lorsque on sélectionne une langue, ce sont les liens de celles-ci qui sont affectés.

 

Pour l'exemple, j'ai trois langues:

- Français (fr) ;

- Anglais (en) ;

- Allemand (de).

 

Si je sélectionne "Français", les liens seront du type: shop.domain.com, shop.domain.com/en/ et shop.domain.com/de/ ; c'est donc le dossier /fr/ qui n'est pas présent.

Si je sélectionne "Anglais", les liens seront du type: shop.domain.com, shop.domain.com/fr/ et shop.domain.com/de/ ; c'est donc le dossier /en/ qui n'est pas présent.

 

Est-ce plus clair ? :)

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

Voici la solution pour une 1.5.x

De préférence, faites des override des classes modifiées.

 

Fichier classes/Link.php

 

Modifier

protected function getLangLink($id_lang = null, Context $context = null)
    {
        if (!$context)
            $context = Context::getContext();

        if (!$this->allow || !Language::isMultiLanguageActivated())
            return '';

        if (!$id_lang)
            $id_lang = $context->language->id;
        
        return Language::getIsoById($id_lang).'/';
    }

   

en

 

protected function getLangLink($id_lang = null, Context $context = null)
    {
        if (!$context)
            $context = Context::getContext();

        if (!$this->allow || !Language::isMultiLanguageActivated())
            return '';

        if (!$id_lang)
            $id_lang = $context->language->id;
        
        if(Language::getIsoById($id_lang)=='fr'){
            return '';
        }
        
        return Language::getIsoById($id_lang).'/';
    }

Fichier classes/Dispatcher.php

 

Modifier

 

protected function setRequestUri()
    {
        // Get request uri (HTTP_X_REWRITE_URL is used by IIS)
        if (isset($_SERVER['REQUEST_URI']))
            $this->request_uri = $_SERVER['REQUEST_URI'];
        else if (isset($_SERVER['HTTP_X_REWRITE_URL']))
            $this->request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
        $this->request_uri = rawurldecode($this->request_uri);
        
        $this->request_uri = preg_replace('#^'.preg_quote(Context::getContext()->shop->getBaseURI(), '#').'#i', '/', $this->request_uri);

        // If there are several languages, get language from uri
        if ($this->use_routes && Language::isMultiLanguageActivated())
            if (preg_match('#^/([a-z]{2})/#', $this->request_uri, $m))
            {
                $_GET['isolang'] = $m[1];
                $this->request_uri = substr($this->request_uri, 3);
            }
    }

en

protected function setRequestUri()
    {
        // Get request uri (HTTP_X_REWRITE_URL is used by IIS)
        if (isset($_SERVER['REQUEST_URI']))
            $this->request_uri = $_SERVER['REQUEST_URI'];
        else if (isset($_SERVER['HTTP_X_REWRITE_URL']))
            $this->request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
        $this->request_uri = rawurldecode($this->request_uri);
        
        $this->request_uri = preg_replace('#^'.preg_quote(Context::getContext()->shop->getBaseURI(), '#').'#i', '/', $this->request_uri);

        // If there are several languages, get language from uri
        if ($this->use_routes && Language::isMultiLanguageActivated())
            if (preg_match('#^/([a-z]{2})/#', $this->request_uri, $m))
            {
                $_GET['isolang'] = $m[1];
                $this->request_uri = substr($this->request_uri, 3);
            }else{
                $_GET['isolang'] = 'fr';
            }
    }

   

Fichier header.tpl (à adapter à votre thème)

 

Modifier

<a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}">

en

 

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

Je pense n'avoir rien oublié.

 

 

Superbe !

 

Cela fonctionne comme un charme sur PS 1.5 :)

 

Bien vu pour la redirection du logo, il fallait y penser ;)

Link to comment
Share on other sites

  • 2 months later...

Concernant le module "supprimer dossier langue" pour prestashop 1.6, je rencontre un problème depuis l' installation dans les résultats SERP. Ma balise title ne semble pas prise en compte pour la version par défaut FR. L' adresse affichée dans les résultats contient le dossier /fr/. Et affiche simplement le nom de la boutique en titre.

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 months later...

Bonsoir, cela fait juste quelque jours que je travail sur la création d'une boutique en ligne avec PrestaShop, j'ai rencontrer ce problème de sous dossier /fr/, juste après l'installation et avoir choisir la langue, quel galère de chercher cette solution de sous dossier, Bon baff, moi je suis parvenue a ce problème en quelque clic, sans toucher vraiment au code,

 

voici la SOLUTION 

 

ETAPE 1 :

Après l'installation rendez-vous dans le panneau d'administration puis localisation ensuite langues, supprimer la langue que vous ne voulez pas sur le site, ou le désactivé

 

ETAPE 2 :

allez dans préférence, ensuite seo & url et génération du ficher robots.txt cliquer sur générer le ficher, ensuite allez a la racine de votre site pour modifier le ficher de cette façon

supprimer le sous dossier /fr/ et /en/ en laissant les chemin de cette façon */produit

 c'est tout vous devez avoir ceci normalement comme moi 

www.votresite.com

 

pour moi c'était comme cela après l'installation

http://mif-boutique.besaba.com/fr/

 

maintenant après les modification je suis à cela 

http://mif-boutique.besaba.com

 

Link to comment
Share on other sites

 

Bonsoir, cela fait juste quelque jours que je travail sur la création d'une boutique en ligne avec PrestaShop, j'ai rencontrer ce problème de sous dossier /fr/, juste après l'installation et avoir choisir la langue, quel galère de chercher cette solution de sous dossier, Bon baff, moi je suis parvenue a ce problème en quelque clic, sans toucher vraiment au code,

 

voici la SOLUTION 

 

ETAPE 1 :

Après l'installation rendez-vous dans le panneau d'administration puis localisation ensuite langues, supprimer la langue que vous ne voulez pas sur le site, ou le désactivé

 

ETAPE 2 :

allez dans préférence, ensuite seo & url et génération du ficher robots.txt cliquer sur générer le ficher, ensuite allez a la racine de votre site pour modifier le ficher de cette façon

supprimer le sous dossier /fr/ et /en/ en laissant les chemin de cette façon */produit

 c'est tout vous devez avoir ceci normalement comme moi 

www.votresite.com

 

pour moi c'était comme cela après l'installation

http://mif-boutique.besaba.com/fr/

 

maintenant après les modification je suis à cela 

http://mif-boutique.besaba.com

 

 

 

 

Bonsoir, cela fait juste quelque jours que je travail sur la création d'une boutique en ligne avec PrestaShop, j'ai rencontrer ce problème de sous dossier /fr/, juste après l'installation et avoir choisir la langue, quel galère de chercher cette solution de sous dossier, Bon baff, moi je suis parvenue a ce problème en quelque clic, sans toucher vraiment au code,

 

voici la SOLUTION 

 

ETAPE 1 :

Après l'installation rendez-vous dans le panneau d'administration puis localisation ensuite langues, supprimer la langue que vous ne voulez pas sur le site, ou le désactivé

 

ETAPE 2 :

allez dans préférence, ensuite seo & url et génération du ficher robots.txt cliquer sur générer le ficher, ensuite allez a la racine de votre site pour modifier le ficher de cette façon

supprimer le sous dossier /fr/ et /en/ en laissant les chemin de cette façon */produit

 c'est tout vous devez avoir ceci normalement comme moi 

www.votresite.com

 

pour moi c'était comme cela après l'installation

http://mif-boutique.besaba.com/fr/

 

maintenant après les modification je suis à cela 

http://mif-boutique.besaba.com

 

 

 

 

Bonsoir, cela fait juste quelque jours que je travail sur la création d'une boutique en ligne avec PrestaShop, j'ai rencontrer ce problème de sous dossier /fr/, juste après l'installation et avoir choisir la langue, quel galère de chercher cette solution de sous dossier, Bon baff, moi je suis parvenue a ce problème en quelque clic, sans toucher vraiment au code,

 

voici la SOLUTION 

 

ETAPE 1 :

Après l'installation rendez-vous dans le panneau d'administration puis localisation ensuite langues, supprimer la langue que vous ne voulez pas sur le site, ou le désactivé

 

ETAPE 2 :

allez dans préférence, ensuite seo & url et génération du ficher robots.txt cliquer sur générer le ficher, ensuite allez a la racine de votre site pour modifier le ficher de cette façon

supprimer le sous dossier /fr/ et /en/ en laissant les chemin de cette façon */produit

 c'est tout vous devez avoir ceci normalement comme moi 

www.votresite.com

 

pour moi c'était comme cela après l'installation

http://mif-boutique.besaba.com/fr/

 

maintenant après les modification je suis à cela 

http://mif-boutique.besaba.com

 

 

Link to comment
Share on other sites

  • 1 month later...

Bonjour

s'il vous plait pourriez vous m'apporter quelques précisions sur "supprimer le sous dossier /fr/ et /en/ en laissant les chemin de cette façon */produit"

je n'ai pas très bien saisi, ou sont les sous dossier en question ? voulez vous dire que je dois modifier les lignes dans le fichiers robots.txt et suprimer tout les fr et en ?

 

cdlt

Link to comment
Share on other sites

  • 1 month later...

Tout cela est tout sauf une bonne idée^^

 

Pourquoi vouloir modifier les urls ? C'est quoi cette nouvelle mode ?

Si votre boutique était en mono-langue avant, il suffit d'ajouter une règle dans le htaccess pour faire suivre les anciennes urls plutot que de bidouiller le comportement de Prestashop.

En faisant cela vous risquez également de planter le sitemap et de créer de nouvelles 404 voire des collisions d'urls (notamment au niveau de toutes les requetes ajax en front)

Link to comment
Share on other sites

  • 2 months later...

Tout cela est tout sauf une bonne idée^^

 

Pourquoi vouloir modifier les urls ? C'est quoi cette nouvelle mode ?

Si votre boutique était en mono-langue avant, il suffit d'ajouter une règle dans le htaccess pour faire suivre les anciennes urls plutot que de bidouiller le comportement de Prestashop.

En faisant cela vous risquez également de planter le sitemap et de créer de nouvelles 404 voire des collisions d'urls (notamment au niveau de toutes les requetes ajax en front)

 

Merci,

pouvez vous nous donner  un exemple de règle,

je suis en production et je vais passer du multiboutique vers le multilingue,

et j'ai pas droit a l'erreur ! :)

Edited by ZIED (see edit history)
Link to comment
Share on other sites

Merci,

pouvez vous nous donner  un exemple de règle,

je suis en production et je vais passer du multiboutique vers le multilingue,

et j'ai pas droit a l'erreur ! :)

 

Euh... ce n'est plus du tout la même problématique là.

Vous êtes en multiboutique mono-langue et vous passez vers le multiboutique multilingue ou vous passez du multi-boutique avec une langue chacune vers une mono-boutique multi-lingue ?

Link to comment
Share on other sites

Euh... ce n'est plus du tout la même problématique là.

Vous êtes en multiboutique mono-langue et vous passez vers le multiboutique multilingue ou vous passez du multi-boutique avec une langue chacune vers une mono-boutique multi-lingue ?

j'ai 5 boutique en multiboutiques

monsite.com  francais monolangue

monsite.it

minsite.co

monsite.es

monsite.biz  pour les professionnels 

le site francais est très bien référencer avec google locale en plus... mais pour les autres j'ai du mal a  décoller c'est une tache très lourde surtout coté baclinks et notoriété...travaille a faire x 5 et je gère tout seul ...donc j'ai penser a  passer en multilingue en laissant que le site professionel en multiboutique 

donc le .it  e .es le .co vont passer en  monsite/it/  monsite/es/  monsite/en/    pour le francais j'aimerai bien qu'il reste en .com sans le  /fr  je pense prendre ce module http://addons.prestashop.com/fr/18980-supprimer-le-dossier-de-langue.html  ?

ou bien passer en /fr et faire la donne redirection pour le tout !

encore merci

Link to comment
Share on other sites

Personnellement je ne vous conseillerai pas de procéder à ces modifications.. conserver votre structure actuelle du multiboutique pour un domaine par langue est plus judicieux, à mon avis.

 

Vous pouvez cependant utiliser un module dont je ne me rappelle plus du nom (mais Mediacom87 saura vous conseiller à ce sujet) qui peut vous permettre d'avoir un menu langue sur chaque boutique renvoyant au bon nom de domaine correspondant.

 

Si le référencement des boutiques dans les autres langue est difficile, ce n'est pas forcément mieux des les combiner sur le mm nom de domaine... google va-til apprécier ou pas ? je ne saurai vous le dire.

Link to comment
Share on other sites

Personnellement je ne vous conseillerai pas de procéder à ces modifications.. conserver votre structure actuelle du multiboutique pour un domaine par langue est plus judicieux, à mon avis.

 

Vous pouvez cependant utiliser un module dont je ne me rappelle plus du nom (mais Mediacom87 saura vous conseiller à ce sujet) qui peut vous permettre d'avoir un menu langue sur chaque boutique renvoyant au bon nom de domaine correspondant.

 

Si le référencement des boutiques dans les autres langue est difficile, ce n'est pas forcément mieux des les combiner sur le mm nom de domaine... google va-til apprécier ou pas ? je ne saurai vous le dire.

oui en théorie c'est évident que la solution multiboutique est la meilleur   mail malheureusement j'ai eu droit une pénalité google sur la requête star  sur le .it  désindexation  ...d'ou l'idée de changement de mon de domaine  vers le tout .com  après avoir corriger l’éventuelle problème que google n'a pas apprécier " je crois" c'est que les fiche produit ne sont pas traduite a 100%  je suis a  50% ....

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...