Le champ doit être déjà présent en base de données
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 :
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 : Another table
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électionner 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électionner le menu SQL Select et renseignez :
return ' ,mt.mon_champ';
- sélectionner le menu SQL Left Join et renseignez :
return " LEFT JOIN "._DB_PREFIX_."ma_table mt ON (mt.id_product= p.id_product)";
- sélectionner 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.