Pour créer un ticket support, commencez par une recherche

Grille produits : Ajouter un champ d'une table externe aux tables produits (éditable)

Pré-requis

  • Version 2014-03-12 de Store Commander
  • Extension SC Éditeur de grilles Pro - Version 1.0
  • Le champ doit être déjà présent en base de données

 

Objectif

Nous souhaitons ajouter le champ "Action spécifique" qui est stocké dans la table ps_specific_action (cette table n'existe pas par défaut dans Prestashop).

Nous pourrons ainsi :

  • utiliser les filtres dans les grilles pour affiner nos sélections de produits
  • éditer en masse ce champ par le système de copier coller de SC
  • exporter rapidement la grille des produits avec ce champ

 

Mise en place

  • Pour ajouter le champ à la liste des champs disponibles pour vos grilles produit, cliquez sur le bouton add.png de l'interface "Ajout de champ", puis saisissez les informations suivantes :


Quel est l'ID du champ ? : action_specifique (doit correspondre exactement au nom du champ dans la base de données)

 

  • SC crée le champ, il faut maintenant renseigner dans la grille :


Nom du champ : Action spécifique

Table : saisissez : special

Rafraîchir les déclinaisons : laisser sur Non

Type : Choix multiple

 

 On imagine dans cet exemple, que la table ps_specific_action contient les champs :

id_specific_action, id_product, specific_action

 

  • Dans le panneau des propriétés avancées :

Liste de choix

 return array(0=>_l('Aucune'), 1=>_l('Colis fragile, emballer avec carton A1'), 2=>_l('Colis long, emballer avec carton B3'));

 

SQLSelectDataSelect :

 return ' ,sact.specific_action ';

 

SQLSelectDataLeftJoin : 

return " LEFT JOIN "._DB_PREFIX_."specific_action sact ON (sact.id_product= p.id_product)";

 

onAfterUpdateSQL : 

if(isset($_POST["specific_action"])) {

$sql = "SELECT * FROM "._DB_PREFIX_."specific_action WHERE id_product=".(int)$idproduct;
$res=Db::getInstance()->ExecuteS($sql);
$specific_action = (int)Tools::getValue('specific_action',0);
if (count($res))
{

   if ($specific_action)
   {
   $sql = "UPDATE "._DB_PREFIX_."specific_action SET specific_action=".(int)$specific_action."  WHERE id_product=".(int)$idproduct;
   Db::getInstance()->Execute($sql);
   }else{
   $sql = "DELETE FROM "._DB_PREFIX_."specific_action WHERE id_product=".(int)$idproduct;
   Db::getInstance()->Execute($sql);
   }
}else{
   $sql = "INSERT INTO "._DB_PREFIX_."specific_action (id_product,specific_action) VALUES (".(int)$idproduct.",".(int)$specific_action.")";
   Db::getInstance()->Execute($sql);
}

}

 

  •  Fermez la fenêtre d'édition des champs personnalisés et ajoutez le champ à vos grilles.