Jump to content

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)
Link to comment
Share on other sites

  • 4 months later...

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)
Link to comment
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

Link to comment
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

Link to comment
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.

Link to comment
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)
Link to comment
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

Link to comment
Share on other sites

  • 2 weeks later...
  • 5 months later...

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 .

Link to comment
Share on other sites

  • 3 weeks later...
  • 6 months later...

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

Link to comment
Share on other sites

  • 1 month later...

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)
Link to comment
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

Link to comment
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_');
        }
Link to comment
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)
Link to comment
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

Link to comment
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

Link to comment
Share on other sites

  • 2 weeks later...
  • 5 months later...
  • 1 year later...
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)
Link to comment
Share on other sites

  • 1 year later...

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

 

 

Link to comment
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);
    }

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