Prix Spéciaux (Fenêtre) - Champ d'une table externe aux tables prix spéciaux

Instructions pour ajouter un champ dans l'interface des Prix Spéciaux et qui se trouve dans une table externe à celles des prix spéciaux

Accédez à la partie PRO de l’outil pour l’ajout de champs personnalisés :

Assurez-vous de bien choisir la grille dans laquelle vous voulez ajouter votre champ - dans cet exemple, il s’agira de la Fenêtre Prix Spécifiques :

Ajout du champ

Clic sur l’icône d’ajout pour créer la ligne du nouveau champ et indiquez son ID mon_champ (doit correspondre exactement au nom du champ dans la table en base de données)

La ligne du champ est créée dans la liste. Il faut maintenant renseigner les informations :

Table

Another table

Nom

Mon Champ

Type

Choix Multiples

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

Il faut ensuite ajouter les éléments de configuration techniques, dans les propriétés spécifiques, dans le panneau de droite :

Copiez/collez le contenu ci-dessous dans le menu Liste de choix (uniquement si le type de champ est « Choix multiple », sinon ne rien mettre) et enregistrez :

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

Copiez/collez le contenu ci-dessous dans le menu SQL Select et enregistrez :

return ' ,mt.mon_champ';

Copiez/collez le contenu ci-dessous dans le menu SQL Left Join et enregistrez :

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

Copiez/collez le contenu ci-dessous dans le menu PHP onAfterUpdateSQL et enregistrez :

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.

Vous pouvez maintenant fermer cette fenêtre.
De retour dans la fenêtre précédente, le nouveau champ se trouve dans la liste des champs disponibles (surligné en orange) et vous pouvez l’ajouter à votre grille des prix spéciaux.