Mettre automatiquement les produits en visibilité nulle part quand hors stock sur Prestashop 1.7
Problématique client
Un de mes clients ne souhaite pas laisser ses produits épuisés sur son site. Pour ce faire, le responsable logistique s'est accoutumé à désactiver les produits !
Il en résulte que les fiches produits concernées sont en erreur 404 ou au mieux en redirection 301.
Ce n'est pas le niveau de référencement idéal, car Google a déjà mis les pages pertinentes dans son index. En outre, tout le temps consacré à la production d'une fiche de produit est détruit...
L'idée est de laisser les fiches produits actives pour faire du "crosselling" et de placer l'option de visibilité à nulle part.
Pour gagner du temps, je suggère de procéder automatiquement à la mise à jour de la quantité :
- Quand un de ses client achète et donc déstocke le produit
- Quand un employé met à jour les quantités produit manuellement.
Nous allons donc lui créer un module Prestashop qui utilisera le hook actionUpdateQuantity
Code du module Prestashop 1.7.8.7
<?php
if (!defined('_PS_VERSION_')) {
exit;
}
class Baba_productqtvisibility extends Module
{
public function __construct()
{
$this->name = 'baba_productqtvisibility';
$this->tab = 'administration';
$this->version = '1.0.0';
$this->author = 'presta.cafe';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('baba_productqtvisibility');
$this->description = $this->l('Set product visibility when quantity update');
$this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
}
public function install()
{
return parent::install() &&
$this->registerHook('actionUpdateQuantity');
}
public function uninstall()
{
return parent::uninstall();
}
public function getContent()
{
$this->context->smarty->assign('module_dir', $this->_path);
$output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl');
return $output;
}
public function hookActionUpdateQuantity(array $params)
{
$id_product = $params['id_product'];
$qt = $params["quantity"];
$product = new Product((int)$id_product);
if($qt == 0) {
$product->visibility='none';
$product->update();
} else {
$product->visibility='both';
$product->update();
}
}
}
Leave a comment
Comments
Problème de code ?
By: Kevin On 04/01/2023Merci pour le code. Je viens de tester en mettant une quantité en stock à 0 depuis le back office puis sauvegardé, cela n'a pas malheureusement pas modifié la visibilité du produit comme escompté ?
Replied by: Alt & Spoon On 05/01/2023