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 :
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 ? : 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 : Another table
Type : Choix multiples
Rafraîchir les déclinaisons : Non
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 à droite :
- sélectionner le menu Liste de Choix et renseigner :
return [0=>_l('Aucune'), 1=>_l('Colis fragile, emballer avec carton A1'), 2=>_l('Colis long, emballer avec carton B3')];
- sélectionner le menu SQL Select et renseigner :
return ' ,sact.specific_action';
- sélectionner le menu SQL Leftjoin et renseigner :
return " LEFT JOIN "._DB_PREFIX_."specific_action sact ON (sact.id_product = p.id_product)";
- sélectionner le menu PHP onAfterUpdateSQL et renseigner :
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 ($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.
Le nouveau champ est présent dans la liste des champs disponibles, et vous pouvez l'ajouter à vos grilles produits.