Jump to content

Griser déclinaisons (texture) indisponibles prestashop 1.7


GBPro
 Share

Recommended Posts

Bonjour à tous.

Comme indiqué dans le titre, je souhaite griser les déclinaisons indisponibles qui sont sous forme de texture dans les fiches produits. Cela pour que le client voit directement les déclinaisons temporairement indisponibles.

Je vous remercie d'avance pour vos retours. Je connais bien la structure de Prestashop, donc s'il faut ajouter du code, il n'y a pas trop de soucis, si c'est bien expliqué.

Share this post


Link to post
Share on other sites

  • 4 weeks later...

Bonjour @Guipau,

Avant toute chose, je vous conseille de créer un thème enfant en suivant la documentation officielle si ce n'est pas déjà fait : https://devdocs.prestashop.com/1.7/themes/reference/template-inheritance/parent-child-feature/
Ainsi, les changements que vous apporterez au thème ne seront pas écrasés si ce dernier doit être mis à jour.

Ensuite, j'ai une question : vos déclinaisons varient-elles selon la texture seulement ou selon plusieurs attributs ?

  • Premier cas : on peut rajouter un peu de code dans le fichier /themes/votre_theme/templates/catalog/_partials/products-variants.tpl :
              <label aria-label="{$group_attribute.name}">
                {assign var="attributes" value=[$id_attribute]}
                {assign var="id_product_attribute" value=Product::getIdProductAttributeByIdAttributes(Tools::getValue('id_product'), $attributes)}
                {assign var="out_of_stock" value=$combinations[$id_product_attribute].quantity <= 0}
                <input class="input-color" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}" title="{$group_attribute.name}"{if $group_attribute.selected && !$out_of_stock} checked="checked"{/if}{if $out_of_stock} disabled{/if}>
                <span
                  {if $group_attribute.texture}
                    class="color texture" style="background-image: url({$group_attribute.texture});{if $out_of_stock} opacity: 60%; cursor: not-allowed;{/if}"
                  {elseif $group_attribute.html_color_code}
                    class="color" style="background-color: {$group_attribute.html_color_code}" 
                  {/if}
                ><span class="sr-only">{$group_attribute.name}</span></span>
              </label>

Il remplace le code des lignes 44 à 53, à savoir :

              <label aria-label="{$group_attribute.name}">
                <input class="input-color" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}" title="{$group_attribute.name}"{if $group_attribute.selected} checked="checked"{/if}>
                <span
                  {if $group_attribute.texture}
                    class="color texture" style="background-image: url({$group_attribute.texture})"
                  {elseif $group_attribute.html_color_code}
                    class="color" style="background-color: {$group_attribute.html_color_code}" 
                  {/if}
                ><span class="sr-only">{$group_attribute.name}</span></span>
              </label>

Je suis pas très fan de ma méthode, puisqu'elle encombre un template avec de la logique, mais c'est la seule que j'ai trouvé sans passer par de l'override.
Parce que oui, je suppose qu'on pourrait aussi override la fonction "assignAttributesGroups" du ProductController.php.

  • Deuxième cas : il faut tenir compte des autres attributs sélectionnés.

Il faudrait ainsi remplacer la ligne :

{assign var="attributes" value=[$id_attribute]}

par

{assign var="attributes" value=Tools::getValue('group')}
{if $group_attribute.texture}
	{$attributes[$id_attribute_group] = $id_attribute}
{/if}

Mais le problème, c'est que si l'utilisateur arrive sur la page produit et ne modifie aucun attribut, la variable 'group' n'est pas définie.
Donc je pense qu'il faudrait trouver une autre méthode si vous êtes dans cette situation...

Je pourrais me pencher sur la création d'un module si besoin est, ce serait peut-être plus propre. 😅

Bonne fin de journée,
Kaudaj.

Edited by Kaudaj (see edit history)

Share this post


Link to post
Share on other sites

Bonjour @Kaudaj,

Merci pour votre retour.

En fait, sur la fiche produit, les clients choisissent une texture tout simplement. Puis ils ajoutent au panier.

Donc si une déclinaison (texture) n'est plus en stock, alors je souhaite la griser pour que les clients voient directement en arrivant sur la fiche produit les déclinaisons en rupture de stock.

Dans ce cas, je suis dans le premier cas ?

Merci

Share this post


Link to post
Share on other sites

Bonjour,

Pour m'expliquer plus clairement, prenons l'exemple d'un T-Shirt.

  • 1er cas : le client choisit une couleur.
  • 2ème cas : le client choisit une taille et une couleur.

Donc oui, vous êtes dans le premier cas 😉

Bonne journée.

  • Like 1

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

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