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

Prix Spéciaux (fenêtre) : ajouter un champ d'une table externe aux tables prix spéciaux


Pré-requis

Le champ doit être déjà présent en base de données

 

Objectif

Nous souhaitons ajouter le champ "Mon champ" qui est stocké dans la table ps_ma_table (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 prix spéciaux
  • éditer en masse ce champ par le système de copier coller de SC
  • exporter rapidement la grille des prix spéciaux avec ce champ


 

Mise en place

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


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

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


Nom du champ : Mon champ
Table : saisissez : special
Type : Choix multiple (doit correspondre à votre type de champ, ici un champ avec des valeurs prédéfinies)
 

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

id_de_ma_table, id_product, mon_champ

 

Dans le panneau des Propriétés Avancées à droite :
 

- sélectionnez le menu Liste de choix (uniquement si le type de champ est « Choix multiple », sinon ne rien mettre) et renseignez :

return array(0=>_l('Aucune'), 1=>_l('Valeur 1'), 2=>_l('Valeur 2'));


- sélectionnez le menu SQL Select et renseignez :

return ' ,mt.mon_champ';


- sélectionnez le menu SQL Left Join et renseignez :

return " LEFT JOIN "._DB_PREFIX_."ma_table  mt  ON (mt.id_product= p.id_product)";


- sélectionnez le menu PHP onAfterUpdateSQL et renseignez :

if (isset($_POST["mon_champ"])) {
    $sql = "SELECT * FROM " . _DB_PREFIX_ . "ma_table WHERE id_product=" . (int)$id_product;
    $res = Db::getInstance()->ExecuteS($sql);
    $mon_champ = (int)Tools::getValue('mon_champ', 0);
    if (count($res)) {
        if ($mon_champ) {
            $sql = "UPDATE " . _DB_PREFIX_ . "ma_table  SET mon_champ=" . (int)$mon_champ . "  WHERE id_product=" . (int)$id_product;
            Db::getInstance()->Execute($sql);
        } else {
            $sql = "DELETE FROM " . _DB_PREFIX_ . "ma_table  WHERE id_product=" . (int)$id_product;
            Db::getInstance()->Execute($sql);
        }
    } else {
        $sql = "INSERT INTO " . _DB_PREFIX_ . "ma_table  (id_product,mon_champ) VALUES (" . (int)$id_product . "," . pSQL($mon_champ) . ")";
        Db::getInstance()->Execute($sql);
    }
}


Ce code est à adapter à vos besoins.

Fermez la fenêtre d'édition des champs personnalisés.

Le nouveau champ est présent dans la liste des champs disponibles, et vous pouvez l'ajouter à vos grilles.