Champs liés aux caractéristiques
Accédez à la partie PRO de l’outil pour l’ajout de champs personnalisés :

Pour accéder à la partie PRO, cliquez sur l'icône + de la colonne de droite intitulée 'Champs Disponibles'
Ajouter un champ Caractéristique prédéfinie produit (lecture seule)
Assurez-vous de bien choisir la grille dans laquelle vous voulez ajouter votre champ - dans cet exemple, il s’agira de la Grille Produits.

Ajout du champ
Clic sur l’icône d’ajout pour créer la ligne du nouveau champ et indiquez son ID myfeature

La ligne du champ est créée dans la liste. Il faut maintenant renseigner les informations :
Ajout des requêtes
Il faut ensuite ajouter les éléments de configuration techniques, dans les propriétés spécifiques, dans le panneau de droite :

Sélectionnez le menu SQL Select et renseignez :
RETURN ', (SELECT fvl.value FROM `' . _DB_PREFIX_ . 'feature_product` fp
LEFT JOIN `' . _DB_PREFIX_ . 'feature_value_lang` fvl
ON fp.id_feature_value = fvl.id_feature_value
WHERE fp.id_feature = 3
AND fp.id_product = p.id_product
AND fvl.id_lang = pl.id_lang) as myfeature ';Dans cet exemple, nous utilisons la caractéristique ID 3 (fp.id_feature = 3).
Vous trouverez les ID des groupes de caractéristiques dans Sc > Catalogue > Caractéristiques > Gestion des caractéristiques.
Enfin, enregistrez la configuration :

Vous pouvez maintenant fermer cette fenêtre.
De retour dans la fenêtre précédente, le nouveau champ se trouve dans la liste des champs disponibles (surligné en orange) et vous pouvez l’ajouter aux vues de votre choix.
Si vous souhaitez ajouter plusieurs colonnes de caractéristiques, l’id des champs seront myfeature2, myfeature3 etc.
Ajouter un champ Caractéristique prédéfinie produit (modifiable)
Assurez-vous de bien choisir la grille dans laquelle vous voulez ajouter votre champ - dans cet exemple, il s’agira de la Grille Produits.

Ajout du champ
Clic sur l’icône d’ajout pour créer la ligne du nouveau champ et indiquez son ID myfeature

La ligne du champ est créée dans la liste. Il faut maintenant renseigner les informations :
Ajouter les requêtes
Il faut ensuite ajouter les éléments de configuration techniques, dans les propriétés spécifiques, dans le panneau de droite :

Copiez/collez le contenu ci-dessous dans le menu SQL Select et enregistrez :
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 ';Copiez/collez le contenu ci-dessous dans le menu Liste de choix et enregistrez :
$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 = [0=> '-'];
if($res) {
foreach ($res as $row) {
$tmp[$row['id_feature_value']] = $row['value'];
}
}
return $tmp;Copiez/collez le contenu ci-dessous dans le menu PHP onAfterUpdateSQL et enregistrez :
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';
if (Db::getInstance()->executeS($sql))
{
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);
}
}Dans cet exemple, nous utilisons la caractéristique ID 3.
Vous trouverez les ID des groupes de caractéristiques dans Sc > Catalogue > Caractéristiques > Gestion des caractéristiques.
Vous pouvez maintenant fermer cette fenêtre.
De retour dans la fenêtre précédente, le nouveau champ se trouve dans la liste des champs disponibles (surligné en orange) et vous pouvez l’ajouter aux vues de votre choix.
Si vous souhaitez ajouter plusieurs colonnes de caractéristiques, l’id des champs seront myfeature2, myfeature3 etc.
Ajouter un champ Caractéristique personnalisée produit (modifiable)
Assurez-vous de bien choisir la grille dans laquelle vous voulez ajouter votre champ - dans cet exemple, il s’agira de la Grille Produits.

Ajout du champ
Clic sur l’icône d’ajout pour créer la ligne du nouveau champ et indiquez son ID myfeature

La ligne du champ est créée dans la liste. Il faut maintenant renseigner les informations :
Ajout des requêtes
Il faut ensuite ajouter les éléments de configuration techniques, dans les propriétés spécifiques, dans le panneau de droite :

Copiez/collez le contenu ci-dessous dans le menu SQL Select et enregistrez :
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)
WHERE fp1_cus.id_feature = "36"
AND fp1_cus.id_product = p.id_product
AND fvl_cus.id_lang = pl.id_lang
LIMIT 1) as myfeature';Copiez/collez le contenu ci-dessous dans le menu PHP onAfterUpdateSQL et enregistrez :
if (isset($_POST['myfeature']))
{
$feature_value = Tools::getValue('myfeature');
$sql = 'SELECT * FROM '._DB_PREFIX_.'feature_product WHERE id_product='.(int) $idproduct.' AND id_feature=36';
$res = Db::getInstance()->executeS($sql);
if ($res)
{
if ($feature_value)
{
$sql = 'UPDATE '._DB_PREFIX_."feature_value_lang SET value='".pSQL($feature_value)."' WHERE id_feature_value=".(int) $res[0]['id_feature_value'];
Db::getInstance()->execute($sql);
}
else
{
$sql = 'SELECT custom FROM '._DB_PREFIX_.'feature_value WHERE id_feature_value='.(int) $res[0]['id_feature_value'].' AND id_feature=36';
$isCustom = Db::getInstance()->getValue($sql);
$sql = 'DELETE FROM '._DB_PREFIX_."feature_product WHERE id_product='".(int) $idproduct."' AND id_feature='36'";
if (Db::getInstance()->execute($sql) && $isCustom)
{
$sql = 'DELETE FROM '._DB_PREFIX_.'feature_value WHERE id_feature_value='.(int) $res[0]['id_feature_value'];
if (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);
}
}
}
}
elseif ($feature_value)
{
$sql = 'INSERT INTO '._DB_PREFIX_.'feature_value (id_feature,custom) VALUES (36,1)';
if (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 ('.(int) $id_value.','.(int) $id_lang.',"'.pSQL($feature_value).'")';
if (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);
}
}
}
}Dans cet exemple, nous utilisons la caractéristique ID 36.
Vous trouverez les ID des groupes de caractéristiques dans Sc > Catalogue > Caractéristiques > Gestion des caractéristiques.
Vous pouvez maintenant fermer cette fenêtre.
De retour dans la fenêtre précédente, le nouveau champ se trouve dans la liste des champs disponibles (surligné en orange) et vous pouvez l’ajouter aux vues de votre choix.
Si vous souhaitez ajouter plusieurs colonnes de caractéristiques, l’id des champs seront myfeature2, myfeature3 etc.