Jump to content
manujay32

Url du bloc langues contenant le paramètre "?controllerUri=index"

Recommended Posts

Bonjour,

 

Depuis peu (impossible de savoir quand ni comment), pour toutes les pages CMS, et en particulier la page d'accueil j'ai le paramètre "?controllerUri" qui s'ajoute aux urls des drapeaux (car je suis en multilangues) du bloc langues prestashop.

 

Quelqu'un a déjà rencontré ce problème ?

 

Comment le solutionner ? Une idée ? Car c'est pas bon du tout pour le SEO.

 

Je ne trouve pas de solution.

 

Je me souviens qu'il y a peu, ce problème n'était pas présent.

 

Je suis en 1.5

 

Merci par avance de votre aide

Edited by manujay32 (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

Avez-vous activé les urls simplifiées, dans le menu "préférences" > "SEO & URL" ?

Si vous ne les avez pas activé, vous aurez une adresse du genre "http://maboutique.truc/index.php?id_product=2&controller=product".

Si elles sont activées, votre url ressemblera à quelque chose du genre "http://maboutique.truc/ma-categorie/8-mon-super-produit.html".

 

Si vous les avez activées , vous aurez un menu "options" en-dessous de l' "'url de la boutique", toujours au même endroit, et vous pouvez choisir comment afficher vos urls.

 

Bon courage,

Cordialement,

Okar

Edited by okar (see edit history)

Share this post


Link to post
Share on other sites

Oui l'option est activée, l'URL avec controlleruri font leur apparition dans certains cas, par exemple en changeant la langue.

Share this post


Link to post
Share on other sites

Bonjour,

Quelle la forme entière de vos urls qui buguent ?

Dans la réécriture d'url, au niveau des pages CMS, quels sont les paramètres qui sont passés ? Peu-être avez-vous un paramètre {controller}.

 

Cordialement,

Okar

Share this post


Link to post
Share on other sites

J'ai exactement le même problème Gipielle et la même config.

 

Est ce que ça pourrait être dut au controller dans l'url des modules ? Vu que le bloc langue est un module ?

Share this post


Link to post
Share on other sites

Bonjour,

@manujay32 : Oui, peut-être.. Le module blocklanguage ne contient pas de controller vraiment, je suis en train de décortiquer un peu où c'est renvoyé.
Je travaille en 1.6, donc si ces fonctionnalités ont changé, je ne pourrais pas être de grand utilité.

 

De ce que j'en ai vu sur le fichier du module (en 1.6), la méthode est la même, entre les produits, les catégories et les pages CMS... Juste au niveau du Dispatcher où la méthode pour les produits va chercher le controller produits, la méthode de catégorie va chercher le controller catégories et idem pour les cms.

Je penche vraiment pour un problème au niveau de la réécriture de l'url, parce que les méthodes pour les liens sont quasi identiques. Ou peut-être dans le fichiers de model Link.php (dans /classes/), mais je n'ai pas vu de chose étrange au niveau du code... Surtout si ça bug une fois sur deux avec le changement de langue uniquement...

 

Si quelqu'un d'autre passe par ici et sait quoi faire pour vous aider, ça sera mieux. Je ferai mes recherches, mais je ne promets rien \:

 

Bon courage en tous les cas,

 

Cordialement,

Okar

Share this post


Link to post
Share on other sites

@okar : Merci pour ton aide.

 

Oui effectivement c'est flagrant sur l'index mais il me semble l'avoir vu autre part. Faudra que je le retrouve. En tout cas sur catégories et produits pas de soucis en changeant de langue.

Share this post


Link to post
Share on other sites

@Gipielle : L'url réécrite est la forme absolue de l'url "h.ttp:/ /monsite.truc/index.php?controller=product&id_product=8" par exemple, sous une forme plus courte et plus lisible pour les moteurs de recherches (comme pour les clients, d'ailleurs).

La forme absolue ci-dessus va en fait pointer vers la localisation de la ressource : en gros, lorsque le client veut visiter la page du produit n°8, le navigateur va demander à monsite.truc d'aller chercher le bon produit. Pour cela, on va questionner le contrôleur des produits pour qu'il aille chercher le produit dont le id_product est 8. (je résume en gros)

La réécriture d'url permet de cacher ces étapes, de ne pas montrer les id des produits entre autre (les clients s'en fichent de savoir que la crème de beauté Nivaya minceur est le produit n°8 dans la base de données, ça ne leur sert à rien).

La réécriture est gérée par un module php intégré sur le serveur (c'est pour cela que sur certains serveurs, on ne peut pas activer cette fonctionnalité). Le format est par contre géré par Prestashop, dans votre back-office, notamment.

 

C'est assez bizarre qu'un controller pointe son nez dans une url réécrite.

 

J'espère avoir été assez claire dans mes explications...

 

@manujay32 : oui, j'ai parlé des CMS car c'est dit dans le problème initial : "[...] pour toutes les pages CMS, et en particulier la page d'accueil [...]". Le problème viendrait du Dispatcher ou du Controller (lequel ?) qui n'arrive pas à prendre en charge un controller de plus pour les langues... Je testerai en  version 1.5 chez moi, quand j'aurais le temps...

 

Cordialement,

Okar

Edited by okar (see edit history)

Share this post


Link to post
Share on other sites

Je pense que c'est  un problème du module de langue, par exun paramètre du module au niveau d'une variable php qui empêche de cacher le paramètre controlleruri au niveau du controller, enfin l'adéquation entre le code prestashop et le module. Ce qui expliquerai aussi pourquoi c'est arrivé d'un coup (mise à jour du module par ex).

 

@Gipielle : Pourrait tu nous donner la version de ton module bloc langues ? La mienne c'est 1.3.2

 

Merci

Share this post


Link to post
Share on other sites

Je suis en 1.3.3 en version 1.6.0.8 de prestashop. Peut-être est-dû aussi à une mauvaise compatibilité prestashop/module de langues, car je n'ai pas de problème sur ma boutique de test, en multiboutique et multilangue...

Edited by okar (see edit history)

Share this post


Link to post
Share on other sites

Le mien est un formulaire personnalisé, mais je pense qu'il est pratiquement égale à l'original, version 1.1

Share this post


Link to post
Share on other sites

Fondamentalement ceux qui ont fait de notre modèle, ils ont changé le nom, mais le module est le même.

Share this post


Link to post
Share on other sites

Bonjour,

 je vous signale aussi que j ai le meme soucis que vous quand on change de langue il y a ?controllerUri=index qui apparait , ce qui est mauvais pour le seo , car cela crée des doublon de URL , avez vous trouvé une solution , je suis avec la toute dernière version à ce jour .

Share this post


Link to post
Share on other sites

Bonjour,

Je profite de ce post car les liens vers les autres langues sauf le Francais ne fonctionne pas, j'ai droit à une page blanche... monsite.be/en ne donne rien.

pouvez-vous m'aider?

Je suis en 1.6.0.14

Merci d'avance

Share this post


Link to post
Share on other sites

Bonjour à tous,

 

Exactement le même problème depuis peu... certainement lié à la désactivation temporaire de la seconde langue de mon site.

 

J'ai donc la surprise de voir débarquer un "fr/?controllerUri=index" sur ma page d’accueil.

 

Une solution sera appréciée je crois!

 

Merci

 

Steve

Share this post


Link to post
Share on other sites

Bonjour

 

I had the same problem. After investigating a little I've seen that controllerUri is used when _PS_ADMIN_DIR_ is defined. It's supposed that this constant it's not defined in front office but, in my case, there was one module that was defining it. It was the prestashop module Cronjobs.

 

If deleted this lines:

if (defined('_PS_ADMIN_DIR_') === false)

   define('_PS_ADMIN_DIR_', _PS_ROOT_DIR_.'/admin/');  

and changed this one:

return basename(_PS_ADMIN_DIR_);

with:

return basename(PS_ROOT_DIR_.'/admin/');

Edited by Serpes (see edit history)

Share this post


Link to post
Share on other sites

Hi Serpes,

 

I tried your solution but it didn't work on my PS.. the website is unreachable and I get back to the original setup to fix it.

J'ai essayé ta solution mais ça ne fonctionne pas.. mon site est inaccessible et je dois revenir au fichier original pour le corriger donc.

 

I think we should never delete but comment.. 

Je pense que nous ne devrions jamais supprimer mais commenter..

 

Steve

Share this post


Link to post
Share on other sites

Hi Serpes,

 

I tried your solution but it didn't work on my PS.. the website is unreachable and I get back to the original setup to fix it.

J'ai essayé ta solution mais ça ne fonctionne pas.. mon site est inaccessible et je dois revenir au fichier original pour le corriger donc.

 

 

Did you edit the cronjob module? I've discovered an error in what I did. Right now I've changed my cronjob module. It doesn't define _PS_ADMIN_DIR_ and I've changed function getAdminDir like this:

        protected function getAdminDir()
        {
                return basename('_PS_ADMIN_DIR_');
        }

Share this post


Link to post
Share on other sites

Wonderful, it's fixed! :) RESOLVED

Super, ça fonctionne! RESOLU

 

To do a safe modification, I create an override with a modified "cronjobs.php" file...

Pour bien faire, j'ai créé un override de mon fichier "cronjobs.php"...

 

Now the "controller-uri" doesn't exist in my address bar!

Désormais, le "controller-uri" ne s'affiche plus dans ma barre d'adresse!

 

Thank you very much Serpes!!

 

Steve

 

OOOOPPSSS !!!

 

I tried to access to the CRON menu in BO.. and I see the following message :

J'ai essayé d'accéder au menu CRON du BO.. et j'ai vu le message suivant:

 

 [PrestaShop] Fatal error in module file :/home/salesupcif/www/override/modules/cronjobs/cronjobs.php:

Cannot redeclare class CronJobs

 

So.. I have to reinstall the original file now..

Donc.. je dois maintenant réinstaller le fichier original.

Edited by Steve360 (see edit history)

Share this post


Link to post
Share on other sites

Wonderful, it's fixed! :) RESOLVED

Super, ça fonctionne! RESOLU

 

To do a safe modification, I create an override with a modified "cronjobs.php" file...

Pour bien faire, j'ai créé un override de mon fichier "cronjobs.php"...

 

Now the "controller-uri" doesn't exist in my address bar!

Désormais, le "controller-uri" ne s'affiche plus dans ma barre d'adresse!

 

Thank you very much Serpes!!

 

Steve

 

OOOOPPSSS !!!

 

I tried to access to the CRON menu in BO.. and I see the following message :

J'ai essayé d'accéder au menu CRON du BO.. et j'ai vu le message suivant:

 

 [PrestaShop] Fatal error in module file :/home/salesupcif/www/override/modules/cronjobs/cronjobs.php:

Cannot redeclare class CronJobs

 

So.. I have to reinstall the original file now..

Donc.. je dois maintenant réinstaller le fichier original.

 

I don't know how did you made the override but looks like the error is because the override class has the same name as the original one. It must be like:

class CronjobsOverride extends Cronjobs
{
      // YOUR OVERRRIDE
}

I didn't use the override because the constant declaration was outside the class so I had to touch the original file anyway

Share this post


Link to post
Share on other sites

You're right again!

 

I save the original file on my computer (juste in case..) and I modified the "cronjobs.php" file with your information. 

Now, it works... no "controller-uri" and no error message!

 

Thanks a lot Serpes, you rock!  :P

 

Steve

 

SUJET RESOLU

Share this post


Link to post
Share on other sites

OK.. sorry to re-open a solved subject.. but after a clean up of my browser history, the "controllerUri=index" reappears on Chrome (only Chrome..) !

 

I'll get crazy with this!

Share this post


Link to post
Share on other sites
On 24/4/2016 at 4:45 PM, Serpes said:

Bonjour

 

I had the same problem. After investigating a little I've seen that controllerUri is used when _PS_ADMIN_DIR_ is defined. It's supposed that this constant it's not defined in front office but, in my case, there was one module that was defining it. It was the prestashop module Cronjobs.

 

If deleted this lines:

if (defined('_PS_ADMIN_DIR_') === false)

   define('_PS_ADMIN_DIR_', _PS_ROOT_DIR_.'/admin/');  

and changed this one:

return basename(_PS_ADMIN_DIR_);

with:

return basename(PS_ROOT_DIR_.'/admin/');

Thank you! That was the solution for me. Same problem with Prestashop 1.7.3.3.

Problem was related to cronjob module, if I disable it problem was gone. But as I need the module, with that fix the problem is gone with module enabled and working.

Edited by Valdic (see edit history)

Share this post


Link to post
Share on other sites

HI, 

cannot find why on some presta (update from 1.7.0) 

in language block on index page I have: 
?controllerUri=index at the end of the link....

 

I solved this by:

open class/Link.php

line 1432 (ps 1.7.6.1)

after:         switch ($params['entity']) {
            case 'language':
                $link = $context->link->getLanguageLink($params['id']);

        switch ($params['entity']) {
            case 'language':
                $link = $context->link->getLanguageLink($params['id']);

I added:

                $link = str_replace('?controllerUri=index','',$link);

and clean cache..... (or remove /var/cache/prod/class_index.php)

 

you MUST have friendly url activated....

 

 

Share this post


Link to post
Share on other sites

But in PS 1.5 classes/Link.php i have this

 

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

        $params = $_GET;
        unset($params['isolang'], $params['controller']);

        if (!$this->allow)
            $params['id_lang'] = $id_lang;
        else
            unset($params['id_lang']);

        $controller = Dispatcher::getInstance()->getController();
    
        if (!empty(Context::getContext()->controller->php_self))
            $controller = Context::getContext()->controller->php_self;

        if ($controller == 'product' && isset($params['id_product']))
            return $this->getProductLink((int)$params['id_product'], null, null, null, (int)$id_lang);
        elseif ($controller == 'category' && isset($params['id_category']))
            return $this->getCategoryLink((int)$params['id_category'], null, (int)$id_lang);
        elseif ($controller == 'supplier' && isset($params['id_supplier']))
            return $this->getSupplierLink((int)$params['id_supplier'], null, (int)$id_lang);
        elseif ($controller == 'manufacturer' && isset($params['id_manufacturer']))
            return $this->getManufacturerLink((int)$params['id_manufacturer'], null, (int)$id_lang);
        elseif ($controller == 'cms' && isset($params['id_cms']))
            return $this->getCMSLink((int)$params['id_cms'], null, false, (int)$id_lang);
        elseif ($controller == 'cms' && isset($params['id_cms_category']))
            return $this->getCMSCategoryLink((int)$params['id_cms_category'], null, (int)$id_lang);
        elseif (isset($params['fc']) && $params['fc'] == 'module')
        {
            $module = Validate::isModuleName(Tools::getValue('module')) ? Tools::getValue('module') : '';
            if (!empty($module))
            {
                unset($params['fc'], $params['module']);
                return $this->getModuleLink($module, $controller, $params, null, (int)$id_lang);
            }
        }        

        return $this->getPageLink($controller, null, $id_lang, $params);
    }

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More