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 :
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électionner le menu SQL Select et renseignez :
return ' , (SELECT fp.id_feature_value FROM `' . _DB_PREFIX_ . 'feature_product` fp
WHERE fp.id_feature = "3"
AND fp.id_product = p.id_product) as myfeature ';
- sélectionner 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électionner 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='3'";
$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.