Jump to content

Remplacer message : "Rupture de stock" par "Cet article est dans votre panier"


Recommended Posts

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

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

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">&#xE5CA;</i>

{elseif $product.availability == 'last_remaining_items'}

<i class="material-icons product-last-items">&#xE002;</i>

{else}

<i class="material-icons product-unavailable">&#xE14B;</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">&#xE5CA;</i>

{$product.availability_message}

{elseif $product.availability == 'last_remaining_items'}

<i class="material-icons product-last-items">&#xE002;</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">&#xE002;</i>

Déja dans votre panier !

{else}

<i class="material-icons product-unavailable">&#xE14B;</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

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

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

  • 3 weeks later...

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