Jump to content

[RESOLU] Modification Texte "Ajouter au panier" en fonction d'un attribut


Recommended Posts

Bonjour,

 

Je vous explique ma demande plutôt spécifique.

Je souhaiterai modifier le texte "ajouter au panier" sur tous mes produits qui ont l'attribut "en occasion" par le texte "CE_QUE_JEVEUX"

 voilà la requête SQL qui permet de selectionner tous les produits en occasion

--> image.png.1e7cf51002cdb84597321541c4da5863.png

SELECT * from ps_product_shop where `condition` = 'refurbished';

SELECT * from ps_product where `condition` = 'refurbished';

 

Maintenant que tout ces produits sont séléctionnés, j'aimerai modifier sur l'ensemble de mon site

la class qui s'appelle 'lblcart' permet à priori de modifier le texte

image.png.ca2b9dd2e4ca396a3cdc8e8813badd45.png

site www.shin-sekai.fr

peut être qq chose à faire avec du cutom JS ?

Merci pour vos retours

 

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

Bonjour okz.

Vous parlez bien du bouton "ajouter au panier" (sauf erreur de ma part  je ne  vois pas d'autres endroits...ha bhé oui on voit ça sur votre copie d'écran) ?

Votre approche me semble originale, concernant la BDD je ne serais quoi dire, si ce n'est qu'il faut l'aimer de tout votre cœur.

En revanche avec du JS le monde nous appartient !

Toutefois laissons de coté cuStom JS et attaquons en Python !!! Arf hélas je viens de réaliser que j'ai une peur bleu (et jaune) des serpents...

Bon tan'pis. Du coup allez via votre FTP dans:

themes/votre theme/template/catalog/_partials/product-add-to-cart.tpl (pour PS 1.7xx)

ou dans product.tpl (pour PS 1.6 il me semble)

Trouvez y votre bouton qui en 1.7 ressemble à ça :

 <div class="add">
          <button
            class="btn btn-primary add-to-cart"
            data-button-action="add-to-cart"
            type="submit"
            {if !$product.add_to_cart_url}
              disabled
            {/if}
          >
            <i class="material-icons shopping-cart">&#xE547;</i>
            {l s='Add to cart' d='Shop.Theme.Actions'}
          </button>
        </div>

Là remplacez :  {l s='Add to cart' d='Shop.Theme.Actions'}

Par quelque chose qui ressemble à ça :

{if $product.condition.label == 'Reconditionné'}
  {l s='ce que je veux'}
{else}
  {l s='Add to cart' d='Shop.Theme.Actions'}
{/if}

 

Bon après vous avez sans doute un thème spécifique, qui diffère un peu, ou êtes en 1.6 donc peut être un code smarty un poil différent, que sais-je,  je n'ai hélas pas testé sur cette noble mouture qu'est 1.6xx (votre copie d'écran me dit ou 1.6 ou... plutôt thème spe en 1.7xx à vrais dire)... auquel cas : adaptez vous vous ... vous voyez l'idée.

 testé en 1.7xx classic :

 

Capture d’écran 2021-04-04 à 05.18.20.png

Capture d’écran 2021-04-04 à 05.17.21.png

Edited by Remy FRK Corp (see edit history)
  • Thanks 2
Link to comment
Share on other sites

Hello !

 

Merci pour ta réponse et surtout le temps que tu as accordé à cette demande plutôt louffoque !

Bon, alors ce n'est pas exactement comme je voulais mais avec ce que tu proposes, il faut que l'état soit affiché par défaut lors de la création d'un article.

cela me dérangeait mais grâce à toi j'ai pu résoudre mon problème !!! Je t'explique juste pour info comment j'ai raisonné.

J'ai donc procédé de la sorte :

 

- J'ai crée une tâche CRON qui exécute toutes les minutes la requête SQL suivante

image.png.9caa3f373bdf0c58c6c87031c555f87c.png

comme ça toutes les minutes, la totalité des produits auront l'état qui apparait sur leur fiche. (si une personne ajoute 15 produits par exemple, une minute plus tard, on verra l'état qui apparait sur leur fiche)

et également

image.png.db52afb7e596d77e9898e68b45b7a490.png

qui met l'état que je veux, (ici refurbished) pour tous les produits contenu dans la catégorie que je souhaite.

 

Je ne souhaitais pas que l'état apparaisse sur les fiches produits donc, j'ai modifié --> themes/votre theme/template/catalog/_partials/product-details.tpl

<div class="product-condition" style="display: none;">

donc le résultat est que sur une fiche produit, on ne voit pas l'état du produit qui apparaît MAIS il est bien présent.

 

Du coup, dès lors qu'on modifie

{if $product.condition.label == 'Reconditionné'} {l s='ce que je veux'} {else} {l s='Add to cart' d='Shop.Theme.Actions'} {/if}

dans le fichier themes/votre theme/template/catalog/_partials/product-add-to-cart.tpl

 

comme tu m'as expliqué, on a le bouton qui change par ce que je veux de manière automatisé.

 

MERCI encore à toi !!!

 

Link to comment
Share on other sites

Salut

Tu pourrais m'expliquer la partie CRON à nouveau ? Précisément tu en attend quoi, j'ai pas compris ?

 

il y a bien moyen de combiner avec des conditions style :

{if $id_category_current == 12 or $id_category_parent == 12} 

ou :

{if $product.id_category_default == 12}

mais...

Enfin de toute façon si tes produits sont "refurbished" as tu vraiment besoins de chercher après la catégorie ?

Tu souhaites que seuls les produits "refurbished" et d'une certaine categorie aient leurs texte de bouton qui changent ?

Edited by Remy FRK Corp (see edit history)
Link to comment
Share on other sites

Je m'en doutais.

Alors,

il y a autre chose à prendre compte, c'est que j'ai également besoin de pouvoir "filtrer" les produits "refurbished" lors de recherches par un utilisateur par exemple. (ici refurbished=précommande)

image.thumb.png.dda0d4c0cf367da137d96d784a4a5953.png

Donc je résume le but du jeu

1. Il faut que tous les articles faisant partie de la catégorie 12 aient automatiquement l'état refurbished. Par défaut lorsqu’un article est crée il est en état "new"

image.png.cdb2e2fd91f35f9655b42074e558794a.png

 

J'ai donc procéder à la requête SQL suivante :

UPDATE ps_product_shop ----> table des produits

SET `condition` = 'refurbished' ---> modification de l'état en refurbished

WHERE id_product IN (SELECT id_product FROM ps_category_product WHERE id_category = 12); ---> Pour tous les produits faisant partie de la catégorie 12 (précommandes)

et j'ai automatisé cela via un job CRON toutes les minutes :

CREATE EVENT `UPDATE 1` ON SCHEDULE EVERY 1 MINUTE ON COMPLETION NOT PRESERVE ENABLE DO UPDATE ps_product_shop SET `condition` = 'refurbished' WHERE id_product IN (SELECT id_product FROM ps_category_product WHERE id_category = 12)

 

--> donc si je rajoute 150 produits, 1min plus tard, leur état seront automatiquement en refurbished (précommande)

 

Ensuite, ce que tu m'a dit intervient.

Il faut que tous les articles ayant pour texte "précommande" dans leur état puisse avoir le bouton où j'écris "ce que je veux" chose que j'ai faite et qui fonctionne.

ton code ne marchait uniquement si cette case est cochée sur les fiches produits :

image.png.c39918debc10137fdf17449d95fc44a2.png

 

J'ai donc mis en place une requêtes pour que cette case soit coché sur la totalité des produits.

UPDATE ps_product_shop --> update de la table produit

SET `show_condition` = '1'; ----> cocher "afficher l'état du produit" sur tout les produits de la table.

 ce qui me permet de valider ta solution.

mais comme effectivement je peux faire {if $id_category_current == 12 or $id_category_parent == 12} je n'ai plus besoin de le faire...

J'espère que tu arriveras à comprendre

 

image.png

image.png

image.png

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

  • okz changed the title to [RESOLU] Modification Texte "Ajouter au panier" en fonction d'un attribut

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