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

Grille Produits : Ajouter une colonne affichant une caractéristique produit (éditable)


Objectif

Nous souhaitons ajouter une colonne qui reprend les valeurs d'une caractéristique pour les produits affichés dans la grille des produits et afficher une liste de choix lorsqu'on clique sur la cellule pour l'éditer.

Nous pourrons ainsi :

  • utiliser les filtres dans les grilles pour affiner nos sélections de produits
  • exporter rapidement la grille des produits avec ce champ
  • modifier en masse une caractéristique de plusieurs produits

 

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 ? : myfeature

 

SC crée le champ, il faut maintenant renseigner dans la grille :

Nom du champ : Livraison
Table : Another table
Type : Choix multiples
Rafraîchir les déclinaisons : Non

 

Dans le panneau des Propriétés Avancées à droite :

- sélectionnez le menu SQL Select et renseignez :

return ' , (SELECT fp.id_feature_value FROM `ps_feature_product` fp 
                WHERE fp.id_feature = "3" 
                AND fp.id_product = p.id_product) as myfeature ';


- sélectionnez le menu Liste de choix et renseignez :

$sql = "SELECT fvl.* 
        FROM " . _DB_PREFIX_ . "feature_value_lang fvl 
        INNER JOIN " . _DB_PREFIX_ . "feature_value fv ON (fv.id_feature_value=fvl.id_feature_value) 
        WHERE fvl.id_lang=1 
        AND fv.id_feature = 3";
$res = Db::getInstance()->ExecuteS($sql);
$tmp = array(0=>" ");
foreach ($res as $row)  {
    $tmp[$row["id_feature_value"]] = $row["value"];
}
return $tmp;

 

- sélectionnez le menu PHP onAfterUpdateSQL et renseignez :

if (isset($_POST["myfeature"])) {
    $feature_value = (int)Tools::getValue('myfeature', 0);
    $sql = "SELECT * FROM " . _DB_PREFIX_ . "feature_product WHERE id_product='" . (int)$idproduct . "' AND id_feature='240'";
    $res = Db::getInstance()->ExecuteS($sql);
    if (count($res)) {
        if ($feature_value) {
            $sql = "UPDATE " . _DB_PREFIX_ . "feature_product SET id_feature_value='" . (int)$feature_value . "' WHERE id_product='" . (int)$idproduct . "' AND id_feature='3'";
            Db::getInstance()->Execute($sql);
        } else {
            $sql = "DELETE FROM " . _DB_PREFIX_ . "feature_product WHERE id_product='" . (int)$idproduct . "' AND id_feature='3'";
            Db::getInstance()->Execute($sql);
        }
    } else {
        $sql = "INSERT INTO " . _DB_PREFIX_ . "feature_product (id_feature,id_product,id_feature_value) VALUES ('3','" . (int)$idproduct . "','" . (int)$feature_value . "')";
        Db::getInstance()->Execute($sql);
    }
}

 

On prend ici la caractéristique ID 3. Vous pouvez changer de caractéristique en allant chercher l'ID voulu dans la fenêtre des caractéristiques (menu Catalogue > Caractéristiques de SC).

 

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.