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 :

Table

Another table

Nom

Ma caractéristique

Type

Juste affiché

Rafraîchir les déclinaisons

Non

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 :

Table

Another table

Nom

myfeature

Type

Choix Multiples

Rafraîchir les déclinaisons

Non

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 :

Table

Another table

Nom

myfeature

Type

Modifiable

Rafraîchir les déclinaisons

Non

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.