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

Grille Produits : ajouter une colonne affichant une caractéristique personnalisée produit (éditable)


Objectif

Nous souhaitons ajouter une colonne qui reprend les valeurs personnalisées d'une caractéristique pour les produits affichés dans la grille des produits.

Nous pourrons ainsi afficher et modifier le texte de la valeur personnalisée des 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 : Auteur
Table : Another table
Type : Modifiable
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 fvl_cus.value FROM `' . _DB_PREFIX_ . 'feature_product` fp1_cus 
                INNER JOIN `' . _DB_PREFIX_ . 'feature_value_lang` fvl_cus ON (fp1_cus.id_feature_value=fvl_cus.id_feature_value AND fvl_cus.id_lang='.(int)$id_lang.')
                WHERE fp1_cus.id_feature = "36" 
                AND fp1_cus.id_product = p.id_product LIMIT 1) as myfeature';


- sélectionner le menu PHP onAfterUpdateSQL et renseignez :

if (isset($_POST["myfeature"])) {
    $feature_value = Tools::getValue('myfeature', 0);
    $sql = "SELECT * FROM " . _DB_PREFIX_ . "feature_product WHERE id_product='" . (int)$idproduct . "' AND id_feature='36'";
    $res = Db::getInstance()->ExecuteS($sql);
    if (count($res)) {
        
							$sql = "SELECT custom FROM "._DB_PREFIX_."feature_value WHERE id_feature_value=".intval($res[0]['id_feature_value'])." AND id_feature=36";
							$fv=Db::getInstance()->getRow($sql);
							
        if ($feature_value) {
            $sql = "UPDATE " . _DB_PREFIX_ . "feature_value_lang SET value='" .pSQL($feature_value). "' WHERE id_feature_value=".intval($res[0]['id_feature_value'])."";
            Db::getInstance()->Execute($sql);
        } else {
            $sql = "DELETE FROM " . _DB_PREFIX_ . "feature_product WHERE id_product='" . (int)$idproduct . "' AND id_feature='36'";
            Db::getInstance()->Execute($sql);
            if ($fv['custom'])
            {
                 $sql = "DELETE FROM " . _DB_PREFIX_ . "feature_value WHERE id_feature_value='" . (int)$res[0]['id_feature_value'] . "'";
                 Db::getInstance()->Execute($sql);
                 $sql = "DELETE FROM " . _DB_PREFIX_ . "feature_value_lang WHERE id_feature_value='" . (int)$res[0]['id_feature_value'] . "'";
                 Db::getInstance()->Execute($sql);
            }
        }
    } else {
        if ($feature_value) {
								    $sql="INSERT INTO "._DB_PREFIX_."feature_value (id_feature,custom) VALUES (36,1)";
								    Db::getInstance()->Execute($sql);
								    $id_value = Db::getInstance()->Insert_ID();
            $sql="INSERT INTO "._DB_PREFIX_."feature_value_lang (id_feature_value,id_lang,value) VALUES (".intval($id_value).",".intval($id_lang).",'".pSQL($feature_value)."')";
									   Db::getInstance()->Execute($sql);

            $sql = "INSERT INTO " . _DB_PREFIX_ . "feature_product (id_feature,id_product,id_feature_value) VALUES ('36','" . (int)$idproduct . "','" . (int)$id_value . "')";
            Db::getInstance()->Execute($sql);
        }    
    }
}

 

On prend ici la caractéristique ID 36. 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.

 

 




Articles associés