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

Grille Produits : ajouter un champ d'une table externe aux tables produits (éditable, avec liste de choix)


Objectif

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 :

  • utiliser les filtres dans les grilles pour affiner nos sélections de produits
  • éditer en masse ce champ par le système de copier coller de SC
  • exporter rapidement la grille des produits 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 ? : 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.




Articles associés