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 [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 (Db::getInstance()->executeS($sql))
{
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.