Jump to content

Modifier le product-flag en fonction de la catégorie produit (PS 1.7.8.3)


Recommended Posts

Bonjour à tous,

je cherche à modifier le product-flag de mes produits en fonction de leur catégorie. En gros si un produit est dans la catégorie 11 alors afficher "occasion" au lieu de "nouveau", s'il est dans la catégorie 15 alors ne rien afficher, sinon comportement normal.

Pour l'occasion je l'ai bien spécifié dans les options des produits en BO mais soit ça affiche "nouveau" soit rien du tout...

A tout hasard j'ai tenté d'exploiter l'idée de @Mediacom87 dans ce topic en essayant de l'adapter à mes exigences, mais sans succès

Si quelqu'un a une idée je suis tout ouï :)

Merci d'avance

Link to comment
Share on other sites

Bonjour,

fichier /themes/votre_theme/templates/catalog/_partials/product-flags.tpl

{block name='product_flags'}
    <ul class="product-flags js-product-flags">
        {if $category->id == 11}
            <li class="product-flag">{l s='Refurb'}</li>
        {elseif $category->id != 15}
            {foreach from=$product.flags item=flag}
                <li class="product-flag {$flag.type}">{$flag.label}</li>
            {/foreach}
        {/if}
    </ul>
{/block}

Il suffira ensuite de traduire le terme Refurb en français et dans les autres langues de votre boutique.

Link to comment
Share on other sites

Bon ben je n'éditerai pas le sujet tout de suite... L'idée semble ne pas vouloir fonctionner : cache presta vidé manuellement et via le BO, cache et cookies du navigateur vidés, rien n'y fait j'ai toujours le flag "nouveau" sur tous les produits, quelle que soit la catégorie. Et si je ramène la durée d'un nouveau produit à 0 jours alors il n'y a plus de flag nulle part. Bref le comportement normal...

Je précise que le thème est un classic-child avec essentiellement des modifications css et une ou deux lignes dans head.tpl, footer.tpl et maintenance.tpl donc pas de quoi fouetter un chat :)

Link to comment
Share on other sites

Version Prestashop ?

Pourtant j'ai testé sur la 1.7.8.4 qui doit être la même sur ce point que la 1.7.8.3 et cela fontionne très bien, donc je ne sais pas ce que vous avez de particulier sur la votre, mais oui je n'ai pas testé sur les produits qui n'ont pas de flag, peut être que cela ne s'affiche pas du tout.

Donc il faudrait rajouter la donnée avant l'appel vers ce tpl.

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

{block name='product_flags'}
   <ul class="product-flags js-product-flags">
       {if (isset($category->id) && $category->id == 9) || (isset($category.id) && $category.id == 9)}
           <li class="product-flag">{l s='Refurb'}</li>
       {elseif (isset($category->id) && $category->id != 15) || (isset($category.id) && $category.id != 15)}
           {foreach from=$product.flags item=flag}
               <li class="product-flag {$flag.type}">{$flag.label}</li>
           {/foreach}
       {/if}
   </ul>
{/block}

utilisez les bon id category

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

Il y a 12 heures, Zythom a dit :

Bonjour à tous,

je cherche à modifier le product-flag de mes produits en fonction de leur catégorie. En gros si un produit est dans la catégorie 11 alors afficher "occasion" au lieu de "nouveau", s'il est dans la catégorie 15 alors ne rien afficher, sinon comportement normal.

Pour l'occasion je l'ai bien spécifié dans les options des produits en BO mais soit ça affiche "nouveau" soit rien du tout...

A tout hasard j'ai tenté d'exploiter l'idée de @Mediacom87 dans ce topic en essayant de l'adapter à mes exigences, mais sans succès

Si quelqu'un a une idée je suis tout ouï :)

Merci d'avance

Bonjour,

Vous devriez utilisez le hook "hookActionProductFlagsModifier" dans un module personnalisé.

Cdt

 

Link to comment
Share on other sites

4 hours ago, remyyyyy said:

Bonjour,

Vous devriez utilisez le hook "hookActionProductFlagsModifier" dans un module personnalisé.

Cdt

 

Merci pour l'idée @remyyyyy! J'avais quelques connaissances il y a quelques années, mais ne pas pratiquer m'a fait presque tout perdre et créer un module est d'un niveau un peu trop élevé pour moi 😅

Mais je garde l'idée, on ne sait jamais ;)

 

4 hours ago, Mediacom87 said:
{block name='product_flags'}
   <ul class="product-flags js-product-flags">
       {if (isset($category->id) && $category->id == 9) || (isset($category.id) && $category.id == 9)}
           <li class="product-flag">{l s='Refurb'}</li>
       {elseif (isset($category->id) && $category->id != 15) || (isset($category.id) && $category.id != 15)}
           {foreach from=$product.flags item=flag}
               <li class="product-flag {$flag.type}">{$flag.label}</li>
           {/foreach}
       {/if}
   </ul>
{/block}

utilisez les bon id category

Merci @Mediacom87je teste ça dés ce soir !

Link to comment
Share on other sites

Je n'ai pas encore testé le dernier code mais juste petite précision : avec le premier bout de code fournit par Mediacom87 je viens de me rendre compte que cela fonctionne, mais uniquement sur la page produit. Par contre sur les pages catégories avec les listes produits cela ne fonctionne pas...

peut-être si j'insère le code dans le categorie.tpl ou le product-list.tpl aussi ?

Link to comment
Share on other sites

5 minutes ago, Mediacom87 said:

non, chez moi cela fonctionne encore faut il avoir bien vidé le cache de Prestashop.

cache vidé dans le BO et via ftp, cache et cookies navigateur vidés également 🤷‍♂️

Edit : peut-être quelque chose qui traîne au niveau du serveur ou des dns car la traduction du 'refurb' n'est pas prise en compte en FO alors que OK dans le BO...

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

il y a 11 minutes, Zythom a dit :

cache vidé dans le BO et via ftp, cache et cookies navigateur vidés également 🤷‍♂️

Edit : peut-être quelque chose qui traîne au niveau du serveur ou des dns car la traduction du 'refurb' n'est pas prise en compte en FO alors que OK dans le BO...

ah ben si vous utilisez des caches en plus je n'y peut rien, puisque cela fait tout de même des années que je les déconseille.

Link to comment
Share on other sites

6 minutes ago, Mediacom87 said:

ah ben si vous utilisez des caches en plus je n'y peut rien, puisque cela fait tout de même des années que je les déconseille.

Alors là j'ai vraiment pas fait exprès c'est pas moi qui gère la partie hébergement 😅

Je vais aller jeter un coup d'oeil...

Link to comment
Share on other sites

Sur le site en ligne je ne comprends pas pourquoi mais cela ne fonctionne toujours pas sur les pages catégorie, uniquement sue la page produit...

Par contre c'est rigolo mais en local le fichier fait planter le site BO et FO ! Aves cette erreur : header has allready been send by jesaisplustropquelfichier.tpl

Si je supprime le produc-flag.tpl le site revient 🤷‍♂️

 

Bref, tant que ça plante pas en ligne ça me va.

Link to comment
Share on other sites

prestashop est très capricieux en 1.7, par exemple entre la 1.7.8.3 et la 1.7.8.4 le même code ne provoque pas la même erreur au même endroit.

sinon, essayez celui-ci

{if (isset($category->id) && $category->id == 9) || (isset($category) && is_array($category) && $category.id == 9)}

 

Link to comment
Share on other sites

Voilà voilà... Après avoir attendu le "temps de propagation incompressible allant de 4 à 24h" des DNS (réponse d'ovh) je me retrouve avec une erreur 503 sur la page produit des produits concernés, et uniquement ceux-là. Et ce quel que soit celui des 3 codes que vous m'avez proposés...

 

Mais je me demandais : lorsque à la création d'un produit, dans les options, on sélectionne "occasion" au lieu de "neuf", le comportement de base de prestashop ne devrait-il pas justement afficher ce flag "occasion" ?

 

ci-dessous le copié/collé de l'erreur...

Error 503 Backend fetch failed

Backend fetch failed

Guru Meditation:

Varnish cache server

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

16 hours ago, Mediacom87 said:

C'est pour ce genre de choses que je déconseille depuis des années OVH pour leur offre mutualisée.

https://www.mediacom87.fr/top-3-des-hebergeurs-mutualises-pour-prestashop/#o2switch

Comme dit plus haut je n'ai pas la main là-dessus... Passons...

 

Je suis tombé sur ce tuto en ligne : https://digiactif.fr/ajouter-un-etat-de-produit-dans-le-back-office-prestashop-1-7/ (oui du coup je cherche à ajouter des états de produits pour différents "degrés" d'occasion)

A un moment il faut modifier le fichier src/Adapter/Presenter/Product/ProductLazyArray.php, et justement dans ce fichier il y est également question des flags. Du coup je me demandais si je pouvais pas trouver un moyen d'associer ces deux choses.

Par exemple à la ligne ou je parle de ma condition "bon état" (à la suite de la ligne 254) :

case 'bon état':
                return [
                    'type' => 'bon état',
                    'label' => $this->translator->trans('bon état', [], 'Shop.Theme.Catalog'),
                    'schema_url' => 'https://schema.org/UsedCondition',
                ];

 

ajouter un truc du genre (trouvé ligne 481)  :

if ($this->product['bon état']) {
            $flags['bon état'] = [
                'type' => 'bon état',
                'label' => $this->translator->trans('bon état', [], 'Shop.Theme.Catalog'),
            ];
        }

 

Serais-je sur une piste, ou me plante-je complètement ?

 

EDIT : je ne suis vraiment plus certain de mon coup car le tuto ne fonctionne pas (adapté à PS 1.7.5 mais apparemment les entrées en BDD ont changé, en tout cas dans les tables citées dans ce tuto :( )

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

On 3/18/2022 at 12:00 PM, remyyyyy said:

Bonjour,

Vous devriez utilisez le hook "hookActionProductFlagsModifier" dans un module personnalisé.

Cdt

 

Bonjour @remyyyyy, ne trouvant pas de solution à mon "problème" je vais essayer de me pencher sur votre suggestion. Vous pouvez être plus précis dans votre idée ? Sans créer le module vous-même, bien entendu, pouvez-vous m'aiguiller un peu plus ?

 

Merci

Link to comment
Share on other sites

il y a 25 minutes, Zythom a dit :

Bonjour @remyyyyy, ne trouvant pas de solution à mon "problème" je vais essayer de me pencher sur votre suggestion. Vous pouvez être plus précis dans votre idée ? Sans créer le module vous-même, bien entendu, pouvez-vous m'aiguiller un peu plus ?

 

Merci

Si tu récupère un base de module sur https://validator.prestashop.com/generator

peut être que tu peux faire rapidement un truc

Link to comment
Share on other sites

5 minutes ago, Mediacom87 said:

Si tu récupère un base de module sur https://validator.prestashop.com/generator

peut être que tu peux faire rapidement un truc

Merci @Mediacom87 c'est ce que je pensais faire, mais je me suis tout juste penché vite fait là-dessus hier soir, faut que j'approfondisse 😁

Quoi qu'il en soit je reviendrai ici donner mes résultats 😉

Link to comment
Share on other sites

  • 5 months later...
Le 25/03/2022 à 9:06 AM, Zythom a dit :

Bonjour @remyyyyy, ne trouvant pas de solution à mon "problème" je vais essayer de me pencher sur votre suggestion. Vous pouvez être plus précis dans votre idée ? Sans créer le module vous-même, bien entendu, pouvez-vous m'aiguiller un peu plus ?

 

Merci

Désolé je n'avais pas vu votre message. Voici un exemple

    public function hookActionProductFlagsModifier($params)
    {
        $flags = $params['flags'];
        $product = $params['product'];

        if (isset($product['id_product']) && (int)$product['id_product']) {
            $id_product = (int)$product['id_product'];
            $categories = Product::getProductCategories($id_product);

			/* .... Code à ajouter ici pour changer le flag selon la catégorie ......... */
        }
    }

 

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