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

Prix Spéciaux (fenêtre) : ajouter un champ d'une table externe aux tables prix spéciaux (avec liste de choix)


Pré-requis

Le champ doit être déjà présent en base de données

Objectif

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 :

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




Articles associés