Jump to content
flohen

afficher uniquement les produits en stock

Recommended Posts

Bonjour a tous

je cherche a afficher en mode multiboutique

en FO uniquement les produits en stock dans une boutique

est ce que quelqu' un aurait une piste

merci

flo

Share this post


Link to post
Share on other sites

Bonjour,

 

On peut choisir par case à cocher dans "Préférences/Produits" si le produit peut être ou non commander hors stock, ensuite si on ne veut pas que les produits hors stock s'affiche, il faut les désactiver produit par produit dans la fiche produit.

 

On peut mettre une alerte sur le stock produit dans la fiche produit à la création.

 

A+

Share this post


Link to post
Share on other sites

ok j y ai deja pensé mais ce n est pas automatique et si je dois desactiver un produit des qu il est vendu cela va etre compliqué

je cherche juste a modifier un script ou autre

merci qu en meme

Share this post


Link to post
Share on other sites

Re,

 

Essayes de voir dans le fichier product.tpl.

 

A+

Share this post


Link to post
Share on other sites

Bonjour,

 

Je me joins à ce topic car je serais également intéressée pour que les produits hors stock soient automatiquement masqués.

 

En effet j'ai souvent de nombreux produits hors stock et je pense que cela nuit aux ventes (les clients attendent les réappros, reportent leur commande, lorsqu'un produit est revenu d'autres manquent etc...)

 

Même s'il faut passer par un module payant, je serais intéressée (selon le prix...), sinon, que faut-il voir plus précisément dans le fichier product.tpl ?

 

Merci par avance !

Share this post


Link to post
Share on other sites

j ai trouvé ceci

Prestashop : ne pas faire apparaître les produits hors stock

 

 

Fonction non prévue dans les versions de Prestashop

 

Pour ne pas faire apparaître les produits hors stock dans Prestashop 1.4.5, modifier le fichier

/classes/Category.php :

 

 

Remplacer lignes 544 et 565

WHERE cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').'

par

WHERE p.quantity > 0 AND cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').'

 

La modification de la ligne 544 permet de calculer correctement le nombre de pages de produits.

 

 

Reste a trouver une solution pour le multiboutique

Share this post


Link to post
Share on other sites

bonjour a tous

je relance car je rame pour le mettre en multiboutique

merci

Share this post


Link to post
Share on other sites

Bonjour,

Une petite astuce simple à mettre en place pour masquer le produit dans la liste produits.

Attention celà ne désactive pas le produit, il ne s'affiche pas en page catégorie uniquement.

 

dans votre productlist.tpl

après:

<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}

ajoutez

{if $product.quantity > 0}

en fin de page avant

{/foreach}

ajoutez

{/if}

 

A vérifier si ça gère les déclinaisons. C'est vérifier, ça prend en compte les déclinaisons

Edited by Muche (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

ok merci je vais essayer

mais comment je peux faire pour que cela fonctionne uniquement sur une seule boutique et que les autres boutiques puissent afficher tous les produits

Share this post


Link to post
Share on other sites

Bonjour,

Merci Muche pour votre aide.

Je me permets d'écrire un post car je suis également intéressé par cette fonctionnalité.

Malheureusement c'est plus complexe que ça, dans le sens il y a des "traces" du produit un peu partout, comme "nouveau produit" etc...pas uniquement sur la liste des produits.

En fait, au final, il faudrait état=désactivé quand son stock est à Zéro, et là le FO devient plus "propre".

Es ce possible ?

Cordialement

Share this post


Link to post
Share on other sites

Effectivement c'est plus complexe.

Vous pouvez également adapter ces modifs dans new-products.tpl + le module new-product.

 

Sinon vous pouvez gratter dans les controllers, mais attention aux déclinaisons.

Share this post


Link to post
Share on other sites

on pourrai pas imaginer une modification qui va chercher l ID de la boutique et qui dit

si c est l ID 1 afficher que les produits en stock dans la gestion avancée

et pour le reste tou afficher avec les parametres

Share this post


Link to post
Share on other sites

un petit up

Je planche , je rame

Mais je suis sur que cela peut intéresser beaucoup de monde

notamment en utilisation perso avec une boutique réel

a+

Share this post


Link to post
Share on other sites

un debut de solution si vous utilisez la navigation a facette :

 

dans le fichier blocklayered.php

 

SELECT
   p.*,sa.*,
   '.($alias_where == 'p' ? '' : 'product_shop.*,' ).'
   '.$alias_where.'.id_category_default,
   pl.*,
   i.id_image,
   il.legend,
   m.name manufacturer_name,
   DATEDIFF('.$alias_where.'.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new
  FROM `'._DB_PREFIX_.'category_product` cp
  LEFT JOIN '._DB_PREFIX_.'category c ON (c.id_category = cp.id_category)
  LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product`
  '.$join.'
  LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product'.Shop::addSqlRestrictionOnLang('pl').')
  LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1)
  LEFT JOIN '._DB_PREFIX_.'image_lang il ON (i.id_image = il.id_image AND il.id_lang = '.(int)($cookie->id_lang).')
  LEFT JOIN '._DB_PREFIX_.'manufacturer m ON (m.id_manufacturer = p.id_manufacturer)
  LEFT JOIN `'._DB_PREFIX_.'stock_available` sa ON (p.`id_product` = sa.`id_product` AND sa.id_shop = '.(int) Context::getContext()->shop->id.')
  WHERE '.$alias_where.'.`active` = 1 AND
  '.(Configuration::get('PS_LAYERED_FULL_TREE') ? 'c.nleft >= '.(int)$parent->nleft.'
  AND c.nright <= '.(int)$parent->nright : 'c.id_category = '.(int)$id_parent).'
  AND sa.`quantity` > 0 AND c.active = 1
  AND pl.id_lang = '.(int)$cookie->id_lang.'
  AND p.id_product IN ('.implode(',', $product_id_list).')'
  .' GROUP BY p.id_product ORDER BY '.Tools::getProductsOrder('by', Tools::getValue('orderby'), true).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).
  ' LIMIT '.(((int)$this->page - 1) * $n.','.$n));

 

Seul soucis le nombre de page qui devient faux mais je pense pas etre loin de la solution.

 

Pour ceux qui n'utilisent pas la navigation a facette meme modif dans product.php dans la fonction getproduct il faut rajouter

sa.*
LEFT JOIN `'._DB_PREFIX_.'stock_available` sa ON (p.`id_product` = sa.`id_product` AND sa.id_shop = '.(int) Context::getContext()->shop->id.')
AND sa.`quantity` > 0 AND c.active = 1

 

++ Andres Jean christophe

  • Like 1

Share this post


Link to post
Share on other sites

Bonjour MUCHE,

 

J'ai essayé votre méthode, mais hélas, ça ne marche pas. Je suis en version 1.4.6.2

 

Est-ce dû à la version ? Vous avez testé et ça marchait sur votre site ?

 

Merci pour votre aide

Share this post


Link to post
Share on other sites

Bonjour MUCHE,

 

J'ai essayé votre méthode, mais hélas, ça ne marche pas. Je suis en version 1.4.6.2

 

Est-ce dû à la version ? Vous avez testé et ça marchait sur votre site ?

 

Merci pour votre aide

testé et approuvé mais sur 1.5

Share this post


Link to post
Share on other sites

Ha ! C'est sur que ça ne marche pas pareil.

Bon, je continue mes recherches, je vous tiendrai informé.

 

J'ai essayé la méthode de FLOHEN, mais elle ne marche pas non plus.

 

A+

Share this post


Link to post
Share on other sites

Bonjour, est ce que quelqu'un a réussi à changer ou localiser la partie ou la pagination se calcule ? car en modifiant la requête (comme Jcandres) on limite effectivement l'affichage aux bons produits mais la pagination reste calculée sur le total et non sur les produits en stock.

Share this post


Link to post
Share on other sites

Pour ceux que ça aide, j'ai finalement réussi en modifiant la requête dans la fonction getNbSales(), afin de compter uniquement le bon nombre de produits hors stocks à 0.

 

$sql = 'SELECT COUNT(DISTINCT(ps.`id_product`)) AS nb

FROM `'._DB_PREFIX_.'product_sale` ps

LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = ps.`id_product`

'.Shop::addSqlAssociation('product', 'p', false).'

LEFT JOIN `'._DB_PREFIX_.'stock_available` sa ON ( sa.id_product = ps.id_product )

WHERE product_shop.`active` = 1 AND sa.quantity > 0';

Share this post


Link to post
Share on other sites

cool je vais essayer des que possible

c est quel fichier que tu modifie Nico

Share this post


Link to post
Share on other sites

Bonjour,

 

rappelons tout fois que désactiver un produit après son achat le rend inaccessible à Google donc erreur 404 pour Google, ce qui n'est pas très bien pour le référencement.

Attention je n'ai pas de solution mais juste un petit message d'avertissement.

à mon avis il serait préférable de développer un module qui désactive le produit après une commande et le réactive après un réapro.

Share this post


Link to post
Share on other sites

bonne remarque

si j ai bien compris qua,d le stock est a zero le produit et desactivé

mais pour google c est idem?

Ou alors il faut un tache crown journaliere pour la mise a jour chez google

Share this post


Link to post
Share on other sites

Après on peut faire d'autres choses comme créer une nouvelle information comme quoi un produit est désactivé et proposer une redirection vers la catégorie par défaut du produit.

c'est un autre soucis.

Share this post


Link to post
Share on other sites

De mon côté le but était de pouvoir ne plus lister les produits hors stock sur les différentes vues (listing des catégories, meilleures ventes etc), de manière à ne pas perdre l'attention des utilisateurs tout en conservant les liens de produits épuisés fonctionnels.

 

Flohen, pour le coup c'était dans la classe ProductSale.php, fonction getNbSales(), j'ai aussi modifié getBestSales() pour afficher un listing correct sur les meilleures ventes.

Share this post


Link to post
Share on other sites

L'idée de retirer ces produits seulement sur les modules annexe et listing de ventes, promo et autre est une bonne idée, et ce qu'il serait bien c'est d'avoir la possibilité de mettre à la fin des listing tous les produits hors stock, vente-privee fait cela est c'estb pas mal, produit vendu en bas de la liste.

Share this post


Link to post
Share on other sites

Bonjour,

Une petite astuce simple à mettre en place pour masquer le produit dans la liste produits.

Attention celà ne désactive pas le produit, il ne s'affiche pas en page catégorie uniquement.

 

dans votre productlist.tpl

après:

 

<ul id="product_list" class="clear">

{foreach from=$products item=product name=products}ajoutez

 

{if $product.quantity > 0}en fin de page avant

 

{/foreach}ajoutez

 

{/if}

A vérifier si ça gère les déclinaisons. C'est vérifier, ça prend en compte les déclinaisons

Edited by Muche, 18 April 2013 - 10:07 AM.

 

Un [RESOLU] 100% de chances de futures réponses

 

 

 

 

Bonjour,

Il me semble que pour que ça gère le stock des déclinaisons, il faut mettre :

{if ($product.allow_oosp || $product.quantity > 0 || $product.quantity_all_versions > 0)}

Cordialement

Philippe

Share this post


Link to post
Share on other sites

Super ça marche nickel pour la version 1.4.6, par contre, ça ne compte pas les produits, du coup on a un problème avec la pagination.

 

Une idée mon cher BILI ?

Share this post


Link to post
Share on other sites

testé et approuvé mais sur 1.5

Malheureusement ne marche en 1.5.6 pour moi non plus si une des déclinaisons à un stock plus grand que 0.

Share this post


Link to post
Share on other sites

Bonjour a tous

ci joint une piste que je vais tester

How to automatically disable out of stock products in PrestaShop

database.pngIntroduction

Today I want to show you how to automatically disable out of stock products in your store. Unfortunately, by default you can't hide products which are out of stock. You can only disallow to order them. So the product will appear on list. In this tutorial you will read how to disable it. As you know, PrestaShop is based on MySQL database, which mean that most important informations (products + categories + etc.) are stored in tables. To achieve what we want - we will use MySQL triggers.

 

What is MySQL trigger?

Trigger is a rule that you put on a table which basically says, whenever you DELETE, UPDATE or INSERT something in this table, also do something else.

 

 

Facts about PrestaShop:

  1. Product informations are stored in tables with ps_product  prefix,
  2. Stock informations are stored in table ps_stock_available (prestashop 1.5.x)
  3. To disable product in the shop you have to change the active field in ps_product_shop table to 0
  4. To enable product in the shop you have to change the active field in ps_product_shop table to 1

 

Concept

We want to create MySQL trigger which will change product visibility in store to off (active=0), when the product quantity equals 0. When product stock value will be bigger than 0 - then product visibility will be turned to on (active=1). As I said the trigger is a rule that we can put on table whenever we (or PHP script - like PrestaShop) DELETE, UPDATE OR INSERT something in this table. When you change product quantity in back office or when someone buy something from you - PHP script automatically UPDATE ps_stock_available table and change the quantity for product that you sold.

 

How to create trigger?

You can create trigger in many ways. You can use SQL query, you can use some database managers like PHPMyAdmin. I will show you both. Okay, let's do the trick :)

 

Each MySQL trigger requires:

  1. A unique name. The best thing is to use a name which describes the table and action that you want to achieve. Anyway, the name depends on you. You can define name exactly as you want - but remember that it must be unique.
  2. The table for which trigger will work, single trigger can only monitor a single table.
  3. When the trigger occurs - you can easily setup when the trigger will occur. You can create trigger BEFORE or AFTER DELTE, UPDATE or INSERT something to table
  4. The Trigger body - a set of SQL queries tu run.

 

 

Our trigger SQL query:

1
2
3
4
5
6
CREATE TRIGGER change_active_after_update AFTER UPDATE ON ps_stock_available
FOR EACH ROW
BEGIN
UPDATE ps_product_shop SET active=0 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity=0);
UPDATE ps_product_shop SET active=1 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity>0);
END

All you have to do with this query - is to run it in prestashop, or somewhere else - for example in database managers like PHPMyAdmin.

 

 Let me say something more about query above.

1
2
CREATE TRIGGER change_active_after_update AFTER UPDATE ON ps_stock_available
FOR EACH ROW

This mean that we creating trigger named change_active_after_update AFTER any UPDATE ON the ps_stock_available table. FOR EACH ROW means that triger will monitor all available entries.

 

1
BEGIN

This means that we start our trigger body here. All SQL queries between the BEGIN & END will run one by one.

 

1
UPDATE ps_product_shop SET active=0 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity=0);

This means that we will SELECT all products from your store, which have quantity value 0. And then query will change the active param to 0 - wich mean that each product with quantity = 0 will be disabled.

 

1
UPDATE ps_product_shop SET active=1 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity>0);

This query is similar to previous, but it will enable all products from your store which are in stock (with quantity value > 0)

 

1
END

END means that here is an end of the trigger body.

 

 

Creating trigger in PHPMyAdmin

I will use here PHPMyAdmin in version 3.5.2.2 (check documentation of PHPMyAdmin). But you can use newest version and older one too, the process of creating trigger is the same in all versions. For the first - log in to your PHPMyAdmin and select database with your prestashop store:

 

phpmyadmin-prestashop-database-1-5-4-1.g

 

Search for ps_stock_available table. We will create trigger on this table, so we have to open it. When you find it on the list - click on table name. you will see something like:

 

phpmyadmin-prestashop-ps-stock-available

 

Click on triggers button in top horizontal menu. You will see all defined trigers for this table (of course if you created). If not - the list will be empty:

 

phpmyadmin-prestashop-ps-stock-available

 

Click on "Add trigger" button. You will see form, where you have to specify trigger parameteres. Fill it exactly as I show below. To the  Definition field - paste the trigger body. Here it is (copy BEGIND + BODY + END), all of the code below:

 

1
2
3
4
BEGIN
UPDATE ps_product_shop SET active=0 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity=0);
UPDATE ps_product_shop SET active=1 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity>0);
END

 

Here is the trigger parameters form:

 

phpmyadmin-prestashop-ps-stock-available

 

When you are convinced that you filled form exactly as I - click on "Go" button. You will se confirmation page:

 

phpmyadmin-prestashop-ps-stock-confirmat

 

 

Your trigger is ready now! 

 

 

photo.jpg
Article by Milosz Myszczuk PrestaShop expert, official PrestaShop community moderator. PHP developer, specialist in relative and spatial databases management, GIS Analyst, CEO & founder of VEKIA interactive agency. Read more about VEKIA company

Share this post


Link to post
Share on other sites

Bonjour,

Je suis en PrestaShop 1.5.4.0, et les solutions présentées ci-dessus ne fonctionnent pas :
1) flohen : les produits s'affichent toujours
2) Bondaty and Co : le nombre de produits ne se met pas à jour, le multipage non plus
3) Nicolain06 : les produits s'affichent toujours
4) flohen : pour les triggers, cela ne convient pas, car cela désactive le produit, et pour la trace de google, il ne faut pas le faire.

Je recherche une solution qui cache les produits hors stock quand on affiche les produits en naviguant dans les catégories.
Mais j'aimerais que cela prenne en compte également les produits au statut "Refuser les commandes" ou "Accepter les commandes".

En clair, si on accepte les commandes hors stock, il faut que le produit soit là même s'il n'est pas en stock.
Par contre, pour les produits où l'on n'accepte pas les commandes hors stock, il faut cacher le produit.

J'aimerais utilise l'override si possible.

Quelqu'un pourrait m'aider ?
Merci beaucoup.

Share this post


Link to post
Share on other sites

Bonjour,

 

Je suis en PrestaShop 1.5.4.0, et les solutions présentées ci-dessus ne fonctionnent pas :

1) flohen : les produits s'affichent toujours

2) Bondaty and Co : le nombre de produits ne se met pas à jour, le multipage non plus

3) Nicolain06 : les produits s'affichent toujours

4) flohen : pour les triggers, cela ne convient pas, car cela désactive le produit, et pour la trace de google, il ne faut pas le faire.

 

Je recherche une solution qui cache les produits hors stock quand on affiche les produits en naviguant dans les catégories.

Mais j'aimerais que cela prenne en compte également les produits au statut "Refuser les commandes" ou "Accepter les commandes".

 

En clair, si on accepte les commandes hors stock, il faut que le produit soit là même s'il n'est pas en stock.

Par contre, pour les produits où l'on n'accepte pas les commandes hors stock, il faut cacher le produit.

 

J'aimerais utilise l'override si possible.

 

Quelqu'un pourrait m'aider ?

Merci beaucoup.

Hello,

 

Voici la solution: rends-toi dans le fichier product-list.tpl de ton thème. exemple (/www/thèmes/Ton_thème)

Ensuite trouves la ligne {foreach from=$products item=product name=products} (astuce ctrl+F pour le moteur de recherche dans ton logiciel d'édition php, etc..)

 

Juste en dessous cette ligne {foreach from=$products item=product name=products} qui se trouve à peut près à la ligne 30 tu mets par exemple à la ligne 31 ce code {if $product.quantity > 0}

 

Après vers la ligne 73 et juste au dessus de {/foreach} tu mets {/if}

 

Et pour finir bien sur tu sauvegardes ton fichier et tu retournes dans le B-O de prestashop sur paramètres>Performances et tu cliques sur "Effacer le cache de Smarty et le cache de l'Autoload" puis admires le résultat dans ta boutique (plus aucun produit hors stock !! beautifull n'est ce pas ?)

 

Et basta .... c'est : [RESOLU]

 

BusinessPhoneAndCom de www.phoneandcom.com

Edited by businessphoneandcom (see edit history)

Share this post


Link to post
Share on other sites

Bonjour a tous

je cherche a afficher en mode multiboutique

en FO uniquement les produits en stock dans une boutique

est ce que quelqu' un aurait une piste

merci

flo

Hello,

 

Voici la solution: rends-toi dans le fichier product-list.tpl de ton thème. exemple (/www/thèmes/Ton_thème)

Ensuite trouves la ligne {foreach from=$products item=product name=products} (astuce ctrl+F pour le moteur de recherche dans ton logiciel d'édition php, etc..)

 

Juste en dessous cette ligne {foreach from=$products item=product name=products} qui se trouve à peut près à la ligne 30 tu mets par exemple à la ligne 31 ce code {if $product.quantity > 0}

 

Après vers la ligne 73 et juste au dessus de {/foreach} tu mets {/if}

 

Et pour finir bien sur tu sauvegardes ton fichier et tu retournes dans le B-O de prestashop sur paramètres>Performances et tu cliques sur "Effacer le cache de Smarty et le cache de l'Autoload" puis admires le résultat dans ta boutique (plus aucun produit hors stock !! beautifull n'est ce pas ?)

 

Et basta .... c'est : [RESOLU]

 

BusinessPhoneAndCom de www.phoneandcom.com

 

Ps: j'ai mis les numéros de ligne à titre indicatif pour PS 1.5.6.2 car sous PS 1.6 c'est de la ligne 42 à 190 par exemple.

Edited by businessphoneandcom (see edit history)

Share this post


Link to post
Share on other sites

DSL

Deja evoquer plus haut

merci quand meme

a+

flo

Share this post


Link to post
Share on other sites

DSL

Deja evoquer plus haut

merci quand meme

a+

flo

Bonjour,

 

le mieux et et plus propre à apporter à ma réponse c'est de créer un fichier PHP et y insérer ces lignes de code:

 

<?php

$link = mysql_connect('db_name_server', 'db_user', 'password');

if (!$link) {

    die('No connection possible: ' . mysql_error());

}

mysql_select_db('db_name');

 

mysql_query('UPDATE ps_1product_shop SET active=0 WHERE id_product IN (SELECT id_product FROM ps_1stock_available WHERE quantity=0)');

mysql_query('UPDATE ps_1product_shop SET active=1 WHERE id_product IN (SELECT id_product FROM ps_1stock_available WHERE quantity>0)');

 

?>

 

en modifiant bien évidemment vos noms utilisateur, mots de passe et nom de base (tout ce qui est en rouge) et si votre base de donnée correspond bien car pour moi c'est ps_1 mais ça peut etre autre choser pour vous et donc à modifier si besoin (voir en bleu). Sinon respectez bien tout les guillemets, les espaces etc... de ce fichier (en faisant un copier / Coller c'est préférable) puis mettez ce fichier .PHP dans votre serveur ftp ou vous voulez et ensuite créez une tâche Webcron chez votre hébergeur.

Moi par exemple chez mon hébergeur ça ressemble à çapost-748573-0-72432800-1397734674_thumb.

 

Vous pouvez le tester directement en url aussi comme par exemple : www.nom_du_site.com/fichier_créé.php (suivant ou vous avez mis le fichier: ici ça correspond à un fichier mis directement dans la racine www du serveur ftp).

 

Si l'on avait mis le fichier dans un dossier du serveur ftp s'appelant par exemple "mon_dossier" ça aurait donné:

www.mon_site.com/mon_dossier/fichier_créé.php

Edited by businessphoneandcom (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

ok je vais tester

Hello,

 

Pas de souci tiens moi au jus car pour moi c'est nickel. Tu n'as plus qu'a remettre le fichier product-list.tpl d'origine par la suite si tu le souhaite (moi je l'ai fait mais pas obligatoire). J'avoue que la tache Webcron c'est super car ça te place tous les produits en stock bien comme il faut dans ton front-office. Avant y avait des trous sur certaines de mes pages (normal c'était juste caché les produits manquants)

Share this post


Link to post
Share on other sites

j ai trouvé ceci

Prestashop : ne pas faire apparaître les produits hors stock

 

 

Fonction non prévue dans les versions de Prestashop

 

Pour ne pas faire apparaître les produits hors stock dans Prestashop 1.4.5, modifier le fichier

/classes/Category.php :

 

 

Remplacer lignes 544 et 565

WHERE cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').'

par

WHERE p.quantity > 0 AND cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').'

 

La modification de la ligne 544 permet de calculer correctement le nombre de pages de produits.

 

 

Reste a trouver une solution pour le multiboutique

Bonjour, ça marche nickel pour moi (PS 1.4.6.2) sauf que les produits à zéro mais commandables ne s'affichent plus… une idée pour contourner le problème? merci !

Share this post


Link to post
Share on other sites

Bonjour, ça marche nickel pour moi (PS 1.4.6.2) sauf que les produits à zéro mais commandables ne s'affichent plus… une idée pour contourner le problème? merci !

Hello, tu as testé avec ma méthode citée plus haut ?

 

Bon jour férié.

 

Ps:Aujourd'hui vu que c'est jour de fête :-) profitez de -5% sur tout le site www.phoneandcom.com

Share this post


Link to post
Share on other sites

Hello, tu as testé avec ma méthode citée plus haut ?

 

Bon jour férié.

 

Ps:Aujourd'hui vu que c'est jour de fête :-) profitez de -5% sur tout le site www.phoneandcom.com

 

Bonjour ! 

 

J'ai bien tout fait comme cité, ça fonctionne sauf pour les produits hors stock commandables : ils n'apparaissent pas  : (

Une idée ? 

 

Merci beaucoup ! 

Share this post


Link to post
Share on other sites

Bonjour ! 

 

J'ai bien tout fait comme cité, ça fonctionne sauf pour les produits hors stock commandables : ils n'apparaissent pas  : (

Une idée ? 

 

Merci beaucoup ! 

Bonjour,

 

Oui c'est normal car moi le but est de faire totalement disparaître les produits hors stocks. Maintenant pour laisser les produits en hors stock commandable il faut ne pas utiliser ma méthode mais plutot aller dans le back office puis dans les préférence > produit et activer l'option "Autoriser la commande de produits en rupture de stock "

Share this post


Link to post
Share on other sites

Bonjour,

 

Oui c'est normal car moi le but est de faire totalement disparaître les produits hors stocks. Maintenant pour laisser les produits en hors stock commandable il faut ne pas utiliser ma méthode mais plutot aller dans le back office puis dans les préférence > produit et activer l'option "Autoriser la commande de produits en rupture de stock "

 

Oui mais dans ce cas, mes produits hors stock et non commandables seront toujours activés.  

 

y'aurait il pas une façon de modifier la product list en précisant dans la condition produit en stock et produit hors stock mais commandables ? 

 

un peu dans le genre :

{if ($product.allow_oosp || $product.quantity > 0)}   

 

Merci pour les pistes : )

Share this post


Link to post
Share on other sites

Oui mais dans ce cas, mes produits hors stock et non commandables seront toujours activés.  

 

y'aurait il pas une façon de modifier la product list en précisant dans la condition produit en stock et produit hors stock mais commandables ? 

 

un peu dans le genre :

{if ($product.allow_oosp || $product.quantity > 0)}   

 

Merci pour les pistes : )

Re-bonjour,

 

Sur ce point je ne suis pas programmateur à mes grands regrets car sinon j'aurai fais pleins de modules pour toutes ces histoires de stocks et autres choses.

 

J'ai trouvé mon fichier php en galèrant un peut et en me creusant grandement les méninges pour modifier ce que je pouvais faire avec lecture de pleins de post-forum.

 

Donc pour le coup je ne vous serais pas d'une grande aide malheureusement.

 

Je vous invite à vous tourner vers les pros de la programmation php dans le forum prestashop.

 

Cordialement.

Edited by businessphoneandcom (see edit history)

Share this post


Link to post
Share on other sites

Je confirme donc pour ceux qui souhaitent afficher les produits en stock ET AUSSI les produits hors stock commandables (seuls les produits hors stock non commandables ne seront pas affichés)

 

il vous faut mettre ceci :

 

dans votre productlist.tpl
après:

<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}

 

ajoutez

 {if ($product.allow_oosp || $product.quantity > 0)}   

 

et en fin de page avant

{/foreach}

 

ajoutez

{/if}

 

SI vous avez comme moi une product list qui propose le double affichage (en liste ou en grille) , il faudra mettre ce code en double.

Dans mon cas j'ai 

{if $smarty.cookies.product_mode  =='list'}
<ul id="product_list" class="list_view clear">
{foreach from=$products item=product name=products}
 
et 
 

 {if $smarty.cookies.product_mode  =='grid' ||  $smarty.cookies.product_mode  ==''}

            <div id="product_list" class="grid_view clear">
            {foreach from=$products item=product name=products}
           {if ($product.allow_oosp || $product.quantity > 0)}   
 
 
 
Je suis sous prestashop 1.5.6.2
 
Il manque maintenant à rectifier le fichier PHP pour que ce dernier prenne en compte la condition "hors stock mais commandable" pour ne pas avoir de trous dans la fiche produit... 
 
Je cherche de mon côté, si quelqu'un peut m'aider à me dépatouiller , merci d'avance !  (merci quand meme pour votre réponse Buisnessphone...)

Share this post


Link to post
Share on other sites

Merci Eolia pour ce module, c'est nikel...

 

Juste un petit bémol par raport à cette solution : J'ai remarqué que le visiteur qui arrive dans la boutique via les moteurs de recherche et par le biais d'un lien renvoyant sur un produit désormais hors stock... ne reste pas dans la boutique, sans doute parce qu'il tombe sur un message laconique et frustrant "produit hors stock". Le plus souvent, il ne cherche même pas à savoir si d'autres produits de la même catégorie sont disponibles.

 

Ne serait-il pas possible alors que cette page "produit non disponible" soit remplacée par la page catégorie de ce produit devenu hors stock?

 

Merci à ceux qui auraient la solution ;)

Share this post


Link to post
Share on other sites

Merci Eolia pour ce module, c'est nikel...

 

Juste un petit bémol par raport à cette solution : J'ai remarqué que le visiteur qui arrive dans la boutique via les moteurs de recherche et par le biais d'un lien renvoyant sur un produit désormais hors stock... ne reste pas dans la boutique, sans doute parce qu'il tombe sur un message laconique et frustrant "produit hors stock". Le plus souvent, il ne cherche même pas à savoir si d'autres produits de la même catégorie sont disponibles.

 

Ne serait-il pas possible alors que cette page "produit non disponible" soit remplacée par la page catégorie de ce produit devenu hors stock?

 

Merci à ceux qui auraient la solution ;)

Il y a une solution :)

 

Ouvrez votre fichier /controllers/front/ProductController.php et suivez les indications ci-dessous: http://www.prestashop.com/forums/topic/236298-afficher-uniquement-les-produits-en-stock/page-3?do=findComment&comment=1920653

Edited by Eolia (see edit history)

Share this post


Link to post
Share on other sites

Merci pour cette réponse flash ;)

J'ai vidé le cache et j'ai modifié le fichier mais je tombe encore sur la page "produit non disponible";;;une idée?

Share this post


Link to post
Share on other sites

Ouvrez votre fichier /controllers/front/ProductController.php et remplacez dans le switch:

						default:
							header('HTTP/1.1 404 Not Found');
							header('Status: 404 Not Found');
							$this->errors[] = Tools::displayError('This product is no longer available.');
						break;

par

default:
		header('HTTP/1.1 302 Moved Temporarily');
        header('Cache-Control: no-cache');
		if(!empty($this->product->id_category_default))
			header('Location: '.$this->context->link->getCategoryLink($this->product->id_category_default));
		else
			header('Location:index.php');
break;
Edited by Eolia (see edit history)

Share this post


Link to post
Share on other sites

 

Ouvrez votre fichier /controllers/front/ProductController.php et remplacez dans le switch:

						default:
							header('HTTP/1.1 404 Not Found');
							header('Status: 404 Not Found');
							$this->errors[] = Tools::displayError('This product is no longer available.');
						break;

par

						default:
							header('HTTP/1.1 302 Moved Temporarily');
                                                        header('Cache-Control: no-cache');
                                                        header('Location: '.$this->context->link->getCategoryLink($this->product->id_category_default));
						break;

 

Bonjour Eolia,

 

J'utilise votre module update elements 2.4 pour désactiver les produits hors stocks. Il y a quelques temps j'ai fais une modification du fichier productcontroller.php pour renvoyer vers la page catégorie lorsque le produit est désactivé. Cela fonctionne très bien et je vous en remercie.

 

J'ai néanmoins constaté un effet secondaire inattendu. C'est que désormais les pages produits n'apparaissent plus dans les résultats de recherche dans google, ou plutôt si mais seulement, comment dire..."en arrière plan". Comme si le moteur de recherche considérait que le produit en question n'avait plus de "personnalité propre" et que sa fiche n'était qu'un fantôme perdu dans les limbes de la catégorie mère. Désolé pour ce langage qui n'est pas du tout technique mais je ne vois pas trop comment l'expliquer autrement.

 

Je vous donne un exemple : captain swing n°69 : en recherchant dans google, seule apparaît la catégorie pour mon site mais pas le lien direct vers l'article.

 

Le soucis c'est que je ne me souviens plus des modifications faites. N'y a-t-il pas un moyen d'expliquer aux moteurs de recherche qu'il ne faut présenter la catégorie uniquement lorsque le produit est hors stock?

 

Merci pour l'aide que vous pourrez m'apporter

Share this post


Link to post
Share on other sites

Les seules modif effectuées sont celles citées ci-dessus.

 

Le produit captain swing n°69 est hors stock ou pas ?

Share this post


Link to post
Share on other sites

Bonjour eolia ;)

 

Merci de m'avoir répondu...

 

Le produit est bien en stock. Mais le résultat est le même pour tous les produits, même ceux récemment mis en ligne, lesquels n'apparaissent dans les moteurs de recherche que dans les pages "nouveaux produits" ou sous les catégories mères. Mais peut-être n'ai-je pas fait les bonnes modifs...

 

Y aurait-il un moyen de coller ici le contenu de mon productcontroller?

Share this post


Link to post
Share on other sites

Non, un pastebin serait préférable^^

 

Mais si vous avez fait la modif ci-dessus, cela ne concerne que les pages 404 (pages inexistantes) donc ne devrait rien modifier pour les produits valides.

Share this post


Link to post
Share on other sites

Votre fichier est correct.

Vous avez fait le test en  le remettant d'origine ? J'ai plutôt l'impression que cela provient du format d'url qui est tronqué par google.

Peut-être raccourcir vos urls simplifiées ?

 

Si je teste sur la recherche " Line album n°11 ", j'arrive bien sur votre fiche produit https://www.google.fr/search?q=Line+album+n%C2%B011&rlz=1C1ASUM_enFR466FR466&oq=Line+album+n%C2%B011

Dernier résultat en 1ère page

 

Un début d'explication ici : http://modulaweb.fr/blog/2010/12/prestashop-et-url-rewriting-pourquoi-cest-la-cata/

du coup la modif vous évite l'erreur 404^^

Share this post


Link to post
Share on other sites

Donc j'ai bien fait la modif et elle me permet d'éviter l'erreur 404, tant mieux ;)

 

Mais j'ai quand même l'impression que plus les résultats sont nombreux par rapport à une recherche sur un mot-clef (et donc plus il y a de concurrence sur ce produit, en somme) et plus une petite boutique comme la mienne a du mal à se frayer un passage. A ce titre, les exemple de Line album 11 et captain swing 69 sont frappants.

Quand je pense que panda avait pour objectif affiché de privilégier le contenu éditorial et que, dans le même temps, les premiers résultats sur de très nombreuses requêtes dans le domaine qui est le mien, renvoient à google shopping, priceminister et les autres, c'est vraiment se foutre du monde!

 

Merci en tout cas pour votre patience.

Share this post


Link to post
Share on other sites

Non, bien entendu...Et la mauvaise foi est parfois sans borne...Mais il y aurait tant à dire!

Share this post


Link to post
Share on other sites

Bonjour,

Une petite astuce simple à mettre en place pour masquer le produit dans la liste produits.

Attention celà ne désactive pas le produit, il ne s'affiche pas en page catégorie uniquement.

 

dans votre productlist.tpl

après:

 

<ul id="product_list" class="clear">

{foreach from=$products item=product name=products}ajoutez

 

{if $product.quantity > 0}en fin de page avant

 

{/foreach}ajoutez

 

{/if}

A vérifier si ça gère les déclinaisons. C'est vérifier, ça prend en compte les déclinaisons

 

Edited by Muche, 18 April 2013 - 10:07 AM.

 

Un [RESOLU] 100% de chances de futures réponses

 

 

 

 

 

Bonjour,

Il me semble que pour que ça gère le stock des déclinaisons, il faut mettre :

 

{if ($product.allow_oosp || $product.quantity > 0 || $product.quantity_all_versions > 0)}

 

Cordialement

Philippe

 

 

Bonsoir

ça fonctionne bien aussi sous Prestashop 1.6. la dernière version et pour la version Cloud de prestashop.

 

Merci :D:blush::rolleyes:

Share this post


Link to post
Share on other sites

Bonjour,

Une petite astuce simple à mettre en place pour masquer le produit dans la liste produits.

Attention celà ne désactive pas le produit, il ne s'affiche pas en page catégorie uniquement.

 

dans votre productlist.tpl

après:

<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
ajoutez

{if $product.quantity > 0}
en fin de page avant

{/foreach}
ajoutez

{/if}
A vérifier si ça gère les déclinaisons. C'est vérifier, ça prend en compte les déclinaisons

 

 

Bonjour,

 

je viens d'essayer cette méthode sur un PS 1.6.1.4, il me masque bien les produits nickel par contre j'ai des espaces vides :(

 

auriez vous une idée ? cf par exemple ici https://velo-electrique.valdeloirevelo.fr/22-vtc-electrique

 

Merci d'avance pour votre aide

 

bonne journée

Share this post


Link to post
Share on other sites

personne j'ai toujours le soucis :(

 

il me compte aussi le nombre de produit hors qu'il n'y a pas de stock et soucis avec les déclinaisons 

Edited by mondeduvelo (see edit history)

Share this post


Link to post
Share on other sites

Je relance le sujet.

Je suis sous 1.6.1.23 .

J'ai testé ça qui fonctionne bien, mais pose des problèmes d'affichage dans les catégories:

<ul id="product_list" class="clear">

{foreach from=$products item=product name=products}

ajoutez

 

{if $product.quantity > 0}en fin de page avant

 

{/foreach}ajoutez

 

{/if}

Malheureusement, le module d'Eolia n'est plus disponible.

Avez-vous trouvé une parade depuis ?

Share this post


Link to post
Share on other sites

c'est a dire ?

Le module passe les produits en visiblité "aucune" lorsqu'il n'y a plus de stock ou modifie la décli par défaut si produit avec déclis.

Les produits ne seront donc plus montrés sur la boutique et réapparaitront si leur stock redevient positif.

Si quelqu'un (ou un bot comme google) teste l'url qu'il avait en mémoire, il verra le produit mais ne pourra le commander.

Share this post


Link to post
Share on other sites

Voici une catégorie de mon site avec la modif que j'ai faite dans product-list.tpl

Ca cache les produits en rupture mais crée le désordre dans les pages:

https://www.planet-fouta.fr/17-fouta-plate

https://www.planet-fouta.fr/17-fouta-plate?p=2

Le site est censé en affiché 25 par page, vous verrez qu'en deuxième page, le fait de cacher les produits en rupture de stock de cette manière on se retrouve avec 11 résultats.

 

Share this post


Link to post
Share on other sites

ben oui c'est logique....

le code php envoie 25 produits et vous en cachez une partie^^

Mon module supprime les produits indispos AVANT de les envoyer sur le front, vous en aurez bien 25 par page ;) 

Share this post


Link to post
Share on other sites

Bonjour

Je rouvre ce sujet, en fait sous prestashop 1.7 les produits en stock 0 sont obligatoirement visible en front office ????

il n'y a aucune option native pour ne pas les afficher? il faut passer par des modules tiers pour les cacher?

Merci

Jerome

Share this post


Link to post
Share on other sites

salut, je remonte le poste.

Pour masquer les produits hors stock tout en prenant en compte les produits ayant des déclinaisons, j'ai ajouté dans le fichier product-list.tpl du theme:

Quote

Prestashop version 1.6.1.13

En dessous de

{foreach from=$products item=product name=products}
{if (!isset($product.available_for_order) || !$product.available_for_order) }{continue}{/if}
{if (!isset($product.quantity_all_versions) && $product.quantity <= 0) }
	{continue}
{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions <= 0) }
	{continue}
{/if}

Un seul problème persiste. C'est la gestion des itérations pour l'affichage des produits en block.

++

Edited by BeHuman
Ajout de la version de prestashop (see edit history)

Share this post


Link to post
Share on other sites

Pour la gestion des itérations de l'affichage en block, j'ai trouvé une solution

...

{assign var='iterationMod' value=0}
{foreach from=$products item=product name=products}
	{if (!isset($product.available_for_order) || !$product.available_for_order)}
		{continue}
	{/if}
	{if (!isset($product.quantity_all_versions) && $product.quantity <= 0) }
		{continue}
	{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions <= 0) }
		{continue}
	{/if}
	{math equation="(it+1)" it=$iterationMod assign=iterationMod}

...

Il faut ensuite remplacer dans le template les occurences de la variable

$smarty.foreach.products.iteration

par

$iterationMod

Mais vus que la résolution d'un problème nous amènes presque toujours à un autre problème, j'ai pour le coup un souci avec le nombre total de produits. Pour le coup, le nombre affiché dans les paginations n'est plus correcte. Je remonterais ma solution une fois que je l'aurais trouvé.

++

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

×
×
  • Create New...

Important Information

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