23 Jan 2019

Front-office Prestashop 1.7 : Sélection d’une déclinaison impossible

Je suis intervenu sur le site d’un client pour un bug peu courant. Lors d’un choix d’une déclinaison, automatiquement la déclinaison par défaut était à nouveau sélectionné. Cela est arrivé sur une des premières versions de Prestashop 1.7. Nous allons voir comment corriger le problème.

Configuration des déclinaisons dans le back-office de Prestashop 1.7

Tout d’abord il faut regarder si votre configuration côté admin est bonne. Pour cela il faut vous rendre dans Paramètres de la boutique > produit.
Dans la colonne fiche produit il faut s’assurer que « Séparateur des attributs dans les liens des produits » soit bien « – » comme ceci :

separateur-declinaison-produit-prestashop-1-7

Problème dans le ProductController du thème

En fouillant un peu sur certains forums Prestashop et en comparant des fichiers Prestashop 1.7 (entre différentes versions), j’ai remarqué que certains éléments étaient inexistants dans le Prestashop du client. Je pense que ce bug a été remonté et l’équipe de Presta a dû corriger le problème sur les dernières versions.

Dans votre fichier, controllers > ProductController.php allez à la ligne 945.
Remplacez la fonction getIdProductAttribute par :

private function getIdProductAttribute($useGroups = false)
    {
        $requestedIdProductAttribute = (int) Tools::getValue('id_product_attribute');

        if ($useGroups === true) {
            $groups = Tools::getValue('group');

            if (!empty($groups)) {
                $requestedIdProductAttribute = (int) Product::getIdProductAttributesByIdAttributes(
                    $this->product->id,
                    $groups
                );
            }
        }

        if (!Configuration::get('PS_DISP_UNAVAILABLE_ATTR')) {
            $productAttributes = array_filter(
                $this->product->getAttributeCombinations(),
                function ($elem) {
                    return $elem['quantity'] > 0;
                }
            );
            $productAttribute = array_filter(
                $productAttributes,
                function ($elem) use ($requestedIdProductAttribute) {
                    return $elem['id_product_attribute'] == $requestedIdProductAttribute;
                }
            );

            if (empty($productAttribute) && !empty($productAttributes)) {
                return (int)array_shift($productAttributes)['id_product_attribute'];
            }
        }

        return $requestedIdProductAttribute;
    }

Télécharger le fichier ProductController.php pour Prestashop 1.7

6 commentaires sur “Front-office Prestashop 1.7 : Sélection d’une déclinaison impossible
  1. Bonjour Matthieu,

    je cherchais l'information en ligne et je l'ai trouvé cependant ça ne fonctionne pas.

    J'ai pourtant 2 sites en version 1.7 :
    1 en version 1.7.5.2 ou j'obtiens cette erreur
    1 en version 1.7.4.2 sur lequel aucun probléme.

    J'ai téléchargé ton fichier et je l'ai copié mais ça ne fonctionne toujour pas
    si tu as une idée,

    merci

    1. Avez-vous bien vidé le cache après la modification dans le back-office et/ou sur le serveur ?

      Sinon de votre côté vous avez peut-être une erreur au niveau Javascript.

      Cette solution a résolu le problème de mon client, je n’en ai pas d’autres pour le moment.

      1. Mon cache n’est pas activé,
        j’ai tout de même supprimé le cache mais rien n’y fait.
        C’est étrange que d’une version ça ne fonctionne pas

        Je penses que c’est du à l’installation car j’ai installé un des sites en automatique avec 02switch et l’autre je l’ai fait via ftp mais je ne me souviens plus lequel a été installé en auto.:-)

        Je vais continuer à chercher
        Merci quand même

  2. Bonjour Matthieu,

    J’ai exactement le même problème.

    Au début j’avais un problème un message erreur quand j’ai ajouté deuxième déclinaisons.

    Message : La valeur du paramètre « max_input_vars » dans le fichier PHP.ini doit être élevée à 2000 afin de permettre la soumission du formulaire produit

    Pour résoudre le problème, j’ai créé un fichier .user.ini j’ai placé dedans:

    max_input_vars=3000
    memory_limit = 256M

    Je pensé avoir solutionné le problème mais non. J’ ai 4 déclinaisons a ajouter sur chaque produits et recherchant sur internet je suis tombé sur cette solution

    Dans votre fichier, controllers > ProductController.php allez à la ligne 945.
    Remplacez la fonction getIdProductAttribute par :

    J’ai remplacé le fichier mais j’ai toujours le meme problème mes 4 déclinaisons de ne s’affiche pas, juste la première.
    MON CACHE EST VIDE BIEN SURE
    Avez vous des idées ?

    MERCI

    1. Bonjour,

      Pour le max_input_vars vous pouvez aussi faire une demande directement à votre hébergeur pour augmenter les valeurs.
      Si vous avez vidé le cache sur le serveur, dans votre navigateur, tout désactivé dans votre Prestashop, alors il y a un problème ailleurs.

      Et comme ça je n’ai pas d’idée, faudrait fouiller 🙂

Laisser un commentaire

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