Liby Posted June 17, 2022 Share Posted June 17, 2022 j'ai un problème avec mes clients qui ajoutent le dernier produit en stock dans leur panier sur 1.7 (je pense que c'est natif mais bon...) : --> Prestashop déstocke la quantité sur la fiche produit et dans les rayons (catalogue) en affichant en rouge "rupture de stock". Lorsque le client reprend la navigation dans le catalogue le produit s'affiche alors en rupture de stock (alors que la dernière quantité est dans son panier). Même chose, si le client retourne sur la fiche d'un des produits de son panier : il y sera noté "Rupture de stock"... Le client ne comprend pas toujours qu'en réalité le produit est dans son panier... soit il quitte le site, soit il me contacte... Je travaille avec des produits uniques donc avec quantité à 1... Je sais que je peux modifier ce texte ou le désactiver mais il m'est quand même utile de le laisser actif. Quelqu'un aurait-il une idée ou module à conseiller ? Merci d'avance pour votre aide :-) Link to comment Share on other sites More sharing options...
AfterGlow93 Posted June 17, 2022 Share Posted June 17, 2022 3 hours ago, Liby said: j'ai un problème avec mes clients qui ajoutent le dernier produit en stock dans leur panier sur 1.7 (je pense que c'est natif mais bon...) : --> Prestashop déstocke la quantité sur la fiche produit et dans les rayons (catalogue) en affichant en rouge "rupture de stock". Lorsque le client reprend la navigation dans le catalogue le produit s'affiche alors en rupture de stock (alors que la dernière quantité est dans son panier). Même chose, si le client retourne sur la fiche d'un des produits de son panier : il y sera noté "Rupture de stock"... Le client ne comprend pas toujours qu'en réalité le produit est dans son panier... soit il quitte le site, soit il me contacte... Je travaille avec des produits uniques donc avec quantité à 1... Je sais que je peux modifier ce texte ou le désactiver mais il m'est quand même utile de le laisser actif. Quelqu'un aurait-il une idée ou module à conseiller ? Merci d'avance pour votre aide 🙂 Bonjour, Ce sujet a déjà été abordé dans un GitHub, il s'agit d'une fonctionnalité supplémentaire, et non d'un bug de PS. https://github.com/PrestaShop/PrestaShop/issues/28523 Une modification du contrôle de stock est nécessaire, ce sera plus complexe qu'une simple ligne de code à remplacer. Link to comment Share on other sites More sharing options...
Liby Posted June 18, 2022 Author Share Posted June 18, 2022 Bonjour, Merci pour votre réponse. Une solution a été trouvée mais elle ne fonctionne pas chez moi car je n'utilise pas le thème basic. Et le code a remplacer n'est pas donc le même... Dans \themes\votre theme\templates\catalog\_partials\product-add-to-cart.tpl Remplacer le code: Citation {block name='product_availability'} <span id="product-availability"> {if $product.show_availability && $product.availability_message} {if $product.availability == 'available'} <i class="material-icons rtl-no-flip product-available"></i> {elseif $product.availability == 'last_remaining_items'} <i class="material-icons product-last-items"></i> {else} <i class="material-icons product-unavailable"></i> {/if} {$product.availability_message} {/if} </span> {/block} par: Citation {* Modif *} {block name='product_availability'} <span id="product-availability"> {if $product.show_availability && $product.availability_message} {if $product.availability == 'available'} <i class="material-icons rtl-no-flip product-available"></i> {$product.availability_message} {elseif $product.availability == 'last_remaining_items'} <i class="material-icons product-last-items"></i> {$product.availability_message} {else} {assign var="inCart" value=false} {foreach from=$cart.products item=product} {if $product.id_product == $product.id_product} {assign var="inCart" value=true} {/if} {/foreach} {if $inCart == true} <i class="material-icons product-last-items"></i> Déja dans votre panier ! {else} <i class="material-icons product-unavailable"></i> {$product.availability_message} {/if} {/if} {/if} </span> {/block} {*=====*} Sauf que moi le code dans ce fichier est : Citation {if !$configuration.is_catalog} <div class="product-add-to-cart text-right"> {block name='product_quantity'} <div class="product-quantity d-flex justify-content-end align-items-end"> {if $product.available_for_order} <div class="qty mr-2 mr-sm-3"> <input class="input-group" id="quantity_wanted" name="qty" aria-label="{l s='Quantity' d='Shop.CreathemeCatalog'}" type="number" value="{$product.quantity_wanted}" min="{$product.minimal_quantity}"> </div> {/if} <div class="add d-flex flex-column align-items-end"> {block name='product_availability'} {if $product.show_availability && $product.available_for_order} <div class="{if $product.quantity <= 0 && $product.allow_oosp}last_remaining_items{else}{$product.availability}{/if} font-weight-bold mt-3" id="product-availability"> {if $product.availability_message} {$product.availability_message} {else} {if $product.quantity <= 0 && $product.allow_oosp} {l s='Preorder' d='Shop.CreathemeCatalog'} {elseif $product.quantity <= 0 && !$product.allow_oosp} {l s='Out of stock' d='Shop.CreathemeCatalog'} {else} {l s='Available' d='Shop.CreathemeCatalog'} {/if} {/if} {if $product.show_quantities && $product.quantity > 0} <small class="quantity text-base text-lowercase" data-stock="{$product.quantity}" data-allow-oosp="{$product.allow_oosp}">({$product.quantity} {$product.quantity_label})</small> {/if} </div> {elseif $product.show_availability && !$product.available_for_order} <div class="unavailable font-weight-bold mt-3" id="product-availability">{l s='Unavailable' d='Shop.CreathemeCatalog'}</div> {/if} {/block} {block name='product_availability_date'} {if $product.availability_date} <div class="product-availability-date"> <label class="label mb-0">{l s='Availability date:' d='Shop.CreathemeCatalog'}</label> {$product.availability_date} </div> {/if} {/block} {if $product.available_for_order} <button class="{if $product.add_to_cart_url}add-to-cart{/if} btn btn-primary mt-3 px-sm-3" type="submit" data-button-action="add-to-cart" {if !$product.add_to_cart_url}disabled{/if}> <i class="icon-shopping-basket-round shopping-cart align-baseline mr-3" aria-hidden="true"></i>{l s='Add to cart' d='Shop.CreathemeCatalog'} </button> {/if} </div> {hook h='displayProductActions' product=$product} </div> {/block} {block name='product_minimal_quantity'} {if $product.available_for_order && $product.minimal_quantity > 1} <div class="product-minimal-quantity my-2"> {l s='The minimum purchase order quantity for the product is %quantity%.' d='Shop.CreathemeCatalog' sprintf=['%quantity%' => $product.minimal_quantity]} </div> {/if} {/block} </div> {/if} La partie à remplacer n'est pas la même, j'ai des lignes supplémentaires... 😞 Link to comment Share on other sites More sharing options...
AfterGlow93 Posted June 18, 2022 Share Posted June 18, 2022 9 hours ago, Liby said: Bonjour, Merci pour votre réponse. Une solution a été trouvée mais elle ne fonctionne pas chez moi car je n'utilise pas le thème basic. Et le code a remplacer n'est pas donc le même... Dans \themes\votre theme\templates\catalog\_partials\product-add-to-cart.tpl Remplacer le code: par: Sauf que moi le code dans ce fichier est : La partie à remplacer n'est pas la même, j'ai des lignes supplémentaires... 😞 Bonjour, Aucune incidence, le thème est différent mais la boucle effectuant le contrôle de l'array $cart.products peut être ajoutée. Il faut ajouter la boucle de contrôle suivante dans le block {block name='product_availability'} : {assign var="inCart" value=false} {foreach from=$cart.products item=product} {if $product.id_product == $product.id_product} {assign var="inCart" value=true} {/if} {/foreach} Idéalement, l'ajouter en tout début du block, avant tout le reste du code contenu dans le block. Cette boucle vérifier que l'article actuel est bien présent dans le panier, et si c'est le cas, passe la variable générée "InCart" à vrai. Ensuite, il faut modifier le texte affiché en modifiant la boucle IF affichant le texte indisponible : {elseif $product.show_availability && !$product.available_for_order} <div class="unavailable font-weight-bold mt-3" id="product-availability">{if $inCart == true} Cet article est déjà dans votre panier {else}{l s='Unavailable' d='Shop.CreathemeCatalog'}{/if}</div> {/if} De cette manière, si la disponibilité est nulle (car dans le panier) mais que l'article y est présent, le message affiché sera "Cet article est déjà dans votre panier", sinon, le message pour les autres clients sera que l'article est indisponible. Attention, le texte étant brut (sans valeur string pour la traduction), en cas de boutique multilingue, seul le message français sera existant. Link to comment Share on other sites More sharing options...
Liby Posted June 19, 2022 Author Share Posted June 19, 2022 Malheureusement il garde le texte de base, il ne tient pas compte des modifications... (j'ai bien viddé le cache). Je pense avoir bien fais les modification que vous me conseillez... Ou alors je suis mal réveillé 😄 {if !$configuration.is_catalog} <div class="product-add-to-cart text-right"> {block name='product_quantity'} <div class="product-quantity d-flex justify-content-end align-items-end"> {if $product.available_for_order} <div class="qty mr-2 mr-sm-3"> <input class="input-group" id="quantity_wanted" name="qty" aria-label="{l s='Quantity' d='Shop.CreathemeCatalog'}" type="number" value="{$product.quantity_wanted}" min="{$product.minimal_quantity}"> </div> {/if} <div class="add d-flex flex-column align-items-end"> {block name='product_availability'} {assign var="inCart" value=false} {foreach from=$cart.products item=product} {if $product.id_product == $product.id_product} {assign var="inCart" value=true} {/if} {/foreach} {if $product.show_availability && $product.available_for_order} <div class="{if $product.quantity <= 0 && $product.allow_oosp}last_remaining_items{else}{$product.availability}{/if} font-weight-bold mt-3" id="product-availability"> {if $product.availability_message} {$product.availability_message} {else} {if $product.quantity <= 0 && $product.allow_oosp} {l s='Preorder' d='Shop.CreathemeCatalog'} {elseif $product.quantity <= 0 && !$product.allow_oosp} {l s='Out of stock' d='Shop.CreathemeCatalog'} {else} {l s='Available' d='Shop.CreathemeCatalog'} {/if} {/if} {if $product.show_quantities && $product.quantity > 0} <small class="quantity text-base text-lowercase" data-stock="{$product.quantity}" data-allow-oosp="{$product.allow_oosp}">({$product.quantity} {$product.quantity_label})</small> {/if} </div> {elseif $product.show_availability && !$product.available_for_order} <div class="unavailable font-weight-bold mt-3" id="product-availability">{if $inCart == true} Cet article est déjà dans votre panier {else}{l s='Unavailable' d='Shop.CreathemeCatalog'}{/if}</div> {/if} {/block} {block name='product_availability_date'} {if $product.availability_date} <div class="product-availability-date"> <label class="label mb-0">{l s='Availability date:' d='Shop.CreathemeCatalog'}</label> {$product.availability_date} </div> {/if} {/block} {if $product.available_for_order} <button class="{if $product.add_to_cart_url}add-to-cart{/if} btn btn-primary mt-3 px-sm-3" type="submit" data-button-action="add-to-cart" {if !$product.add_to_cart_url}disabled{/if}> <i class="icon-shopping-basket-round shopping-cart align-baseline mr-3" aria-hidden="true"></i>{l s='Add to cart' d='Shop.CreathemeCatalog'} </button> {/if} </div> {hook h='displayProductActions' product=$product} </div> {/block} {block name='product_minimal_quantity'} {if $product.available_for_order && $product.minimal_quantity > 1} <div class="product-minimal-quantity my-2"> {l s='The minimum purchase order quantity for the product is %quantity%.' d='Shop.CreathemeCatalog' sprintf=['%quantity%' => $product.minimal_quantity]} </div> {/if} {/block} </div> {/if} Link to comment Share on other sites More sharing options...
Liby Posted June 21, 2022 Author Share Posted June 21, 2022 Personne n'a une petite idée ? Link to comment Share on other sites More sharing options...
Natc77 Posted July 11, 2022 Share Posted July 11, 2022 moi j'ai appliqué la solution de Jutix34500 dans ce post Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now