10/21/21 Franck Bugnet Tuto Guide

Importer dans des champs personnalisés ou custom

PrestaShop a beau être un logiciel très complet, il arrive fréquement qu'un e-commerçant ai besoin d'importer des données dans des champs personalisés, dits "non standards" ou libres, qu'il (ou son webmaster) a ajouté dans la base.
On pourrait vous citer un grand nombre d'exemples : importer une seconde description html dans un nouveau block de texte, importer des prix de vente publiques conseillés, importer des prix spécifiques dans une place de marché comme Amazon, gérer les stocks fournisseurs dans une seconde colonne de stock, importer le code douanier demandé par Colissimo...

Nativement, le back office de PrestaShop ne permet pas de réaliser ce type d'importation, il faut soit utiliser un outil dédié, soit un back office alternatif qui en soit capable, comme Merlin Backoffice, à partir de sa version 1.6.

Comment ajouter un nouveau champ personnalisé dans la base de données de PrestaShop ?


La plus simple des méthode, installer un module qui ajoute des tables et des rubriques supplémentaires dans votre boutique


Par exemple, le module Amazon ajoute des tables dans la base qui lui sont propres, et l'une d'elle contient un rubrique "Prix Net sur Amazon" qui pourra contenir un prix de vente spécifique à leur place de marché et tout un tas d'autres informations obligatoires qui n'existent pas dans PrestaShop :

Champs ajoutés dans la base par le module Amazon


Le gros défaut de ce type de module est que pour remplir ce type de champs, il faut le faire un produit à fois. Ouvrir la fiche, aller dans l'onglet du module, saisir les valeurs, sauver, revenir à la liste des produits, ouvrir la fiche suivante... c'est une grosse perte de temps.

Depuis longtemps, grâce aux "colonnes perso", Merlin faisait déjà gagner du temps en permettant de remplir ce type de données directement dans la table des produits, ligne après ligne, avec sauvegarde automatique dans la base quand on passe à la ligne suivante.

Comme vous allez le découvrir ci-dessous, Merlin permet maintenant de rentrer en masse ce type de données à partir de fichiers cvs ou Excel.


Attention ne pas confondre : un champ personnalisé, custom, libre, non standard, annexe, perso etc... ce n'est pas la même chose qu'un champ de personnalisation.Un champ de personnalisation est une rubrique native de Prestation. Ils en existent deux types, champs texte et champs fichier. Ils permettent à vos clients de vous communiquer des informations complémentaires lors de la commande d'un produit personnalisable. Un champ personalisable de type texte permettra par exemple au client de fournir le texte à imprimer sur un tee-shirt ou le prénom d'un enfant à utiliser pour produire un sticker à coller sur la porte de sa chambre.Un champ de personnalisation de type ficher permettra par exemple à votre client de vous envoyer une photo pour que vous aller imprimer sur le produit vendu.


Tee shirt personnalisable grace à un champ de personnalisation

Ajout d'un champ de personnalisation dans PrestaShop :



  1. Allez dans la partie "Catalogue"
  2. Allez dans "Produit"
  3. Puis dans "Personnalisation"
  4. Saisissez pour les deux types de champ, fichier ou texte, le nombre de champ de personnalisation souhaités
  5. Enregistrez

Ajout d'un champ de personnalisation dans PrestaShop

De nouveaux paramétrages apparaissent, permettant de choisir le nom du fichier ou le libellé du champ texte (la consigne).

  1. Saisir le libellé
  2. Enregistrer à nouveau
 

Paramétrage champ de personnalisation dans PrestaShop



Ajout d'un champ libre dans une des tables natives de PrestaShop.


Il faut pour cela utiliser un outil de gestion de base de données MySQL, comme PHPMyAdmin, souvent inclus gratuitement dans le CPanel de votre hébergement.

Si vous n'avez aucune connaissance en MySQL ni sql, ni sur cet outil, il est impératif de suivre quelques tutos sur les bases de données MySQL, pour comprendre quelques notions de base comme les identifiants, les tables liées, les index, le typage, les clés uniques, les rubriques en auto incrément, la gestion des valeurs null... et sur PHPMyAdmin lui même. Vous n'avez pas besoin cependant d'apprendre le langage MySQL, qui permet d'écrire des requêtes pour lire ou modifier les données, ça c'est le travail de Merlin justement.
Ou confier le travail, sommes toutes très simple, à un webmaster. Ce n'est en effet pas compliqué à faire mais jouer avec la base est très dangereux quand on tatonne.
Le meilleur conseil : toujours faire une sauvegarde préalable de la base de données.

    1. Une fois dans PHPMyAdmin, sélectionnez la base de données
    2. Sélectionnez la table dans laquelle vous voulez ajouter un ou des champs
    3. Allez dans l'onglet "Structure"
    4. En dessous de la liste actuelle des colonnes, choisir le nombre de nouvelles colonnes souhaitées et cliquez sur "Exécuter"


Ajout de colonnes dasn PrestaShop avec PHPMyAdmin 1/2

 Dans le formulaire d'ajout de colonnes, choisir ou saisir les infos critiques :

  1. Donnez un nom à votre colonne, évitez les espaces et caractères spéciaux ou accentués.
  2. Choix du type de colonne, Text pour un texte sans limite de taille, Varchar pour un texte court, INT pour un entier etc.
  3. Si le type est Varchar ou un chiffre à virgule, il faudra indiquer sa taille ou le nombre de décimales.
  4. Choix de la valeur par défaut.
  5. Choix de l'interclassement, aussi appelé encodage. Pour PrestaShop on vous recommende de choisir UTF8 General CI, sauf cas particuliers.
  6. Cochez cette case si vous voulez autoriser à ce que cette colonne puisse contenir des valeurs nulles. Si non coché toutes les lignes actuelles de la table seront modifiées et recevront la valeur par défaut définie en 4.
  7. A ne remplir que si cette colonne doit être définie comme étant une clé ou un index.
  8. A.I veut dire Auto Incrément. A cocher si il s'agit d'une colonne de type INT qui doit s'incrémenter à chaque ajout de ligne (bref un compteur automatique).
  9. On vous conseille d'ajouter un petit commentaire pour que l'on sache qui a ajouté cette colonne.


Ajout de colonnes dasn PrestaShop avec PHPMyAdmin 2/2


Si vous souhaitez en plus que vos champs personnalisés soit visibles dans l'admin de PrestaShop, ça se complique franchement, car en plus de les ajouter dans la base, il faudra modifier le code PHP, si possible en utilisant un hook, ou alors par la méthode du surclassement (override) :
  • Le code PHP de l'objet (ex : class product), pour y ajouter la rubrique.
  • Le code du controlleur de l'objet, pour qu'il sache lire et modifier les valeurs de cette rubrique.
  • Le code Smarty du fichier tpl ou Symphony d'affichage de l'objet dans l'admin pour gérer l'affichage, voir la saisie de la nouvelle rubrique la ou vous le souhaitez.

Et si la donnée doit être affichée en boutique, par exemple dans la page du produit, il faudra faire le même type de travail, en particulier sur le code des fichiers tpl du thème.

Modifier proprement le code et le thème n'est réalisable que par un vrai programmeur, ne vous lancez pas la dedans si votre vrai métier, c'est d'être commerçant.

Installer un module PrestaShop d'ajout de champs custom.


Chez Sitolog, nous en avons développé un, il permet d'ajouter sur la boutique, dans la page des produits, des onglets ou tiroirs supplémentaires, contenant n'importe quel type de données, du simple champ de bloc texte, à la page HTML sophistiquée. Ce contenu peut être personnalisé par produit, donc unique, ou bien être commun à plusieurs produits.
Ce module cependant, ne fonctionne qu'avec PrestaShop 1.5. Les versions pour PS 1.6 et 1.7 seront développées le jour ou la technologie utilisée par PrestaShop sera stabilisée.

Mais sur la place de marché de PS, il existe beaucoup d'autres modules du même type, certes moins flexibles mais qui permettent par exemple d'afficher un block de texte HTML n'importe ou dans les pages du site.

Si votre problématique est uniquement d'enrichir vos pages produits avec de nouveaux blocks de texte riche, il existe un petit module gratuit qui fait le job. Voici le lien vers un tuto explicatif. Il faudra mettre les doigts dans le code tpl du fichier product et du panier, mais ça se fait assez facilement.

Encore faut-il ensuite disposer d'un outil rapide pour importer le code HTML de chaque article dans ces blocks, d'ou l'intérêt de Merlin Backoffice.

Importation de champs libres PrestaShop avec le module Merlin Backoffice - quel type de fichiers ?


C'est une des grandes nouveauté de la version 1.6 de Merlin. Il permet d'importer dans quasiment n'importe quel type de champ personnalisé, de n'importe quelle table.

Le point de départ, c'est de disposer ou de fabriquer un fichier csv, xls ou mieux xlsx contenant les données. Deux colonnes suffisent, celle contenant les données destinées au champ perso, et une autre permettant d'identifier le parent lié, soit le produit, soit la déclinaison ou encore la catégorie à modifier.
Merlin pourra importer ce type de fichier aussi bien pour créer l'article (le produit...), que pour juste le mettre à jour (modifier les valeurs dans le champ personnalisé).

Comme pour toutes les autres rubriques et colonnes, la colonne contenant les valeurs perso pourra avoir n'importe quel titre, pourvu qu'il soit non vide et qu'il soit unique. 
Cependant, vous pourrez gagner encore un peu plus de temps dans les processus ci-dessous, si dès le départ vous pensez à nommer ce type de colonne de tel façon à ce que Merlin comprenne tout seul dans quelle colonne de quelle table de la base il doit importer ces valeurs. Pour cela il suffit que le titre de la colonne soit sous la forme "nomdelatable point nomdelacolonne".

Ex : pour importer dans la colonne prix_amazon de la table ps_amazon, il suffit de titrer la colonne avec ps_amazon.prix_amazon ou bien amazon.prix_amazon (on peut se passer du préfix, si c'est celui commun aux autres tables de la base, défini dans la configuration de PrestaShop).

Un exemple de fichier de test avec plusieurs colonnes d'import dans des champs perso :

Fichier Excel d'import de champs personnalisés

Une fois votre fichier prêt, lancez la fenêtre d'importation depuis Merlin, comme d'habitude, créez une nouvelle tâche et allez chercher votre fichier dans l'étape 1 :

Choix du fichier d'importation




Mapper les colonnes du fichier cvs ou Excel vers les champs non standards


On procède comme pour les autres rubriques natives, à l'étape deux :

  1. Générez un nouveau modèle de mapping
  2. Cliquez dans la liste déroulante de la seconde ligne, juste en dessous du titre de votre colonne
  3. La fenêtre de mapping apparaît, cochez la nouvelle case "Autres rubriques"



Etape de mappage de champs personnalisés

  1. Merlin vous demande le nom de la table et de la rubrique. Par défaut, le champ de saisi contient le titre de la colonne dans le fichier. Si vous avez donné comme titre à votre colonne, le nom de la table point suivi du nom du champ, vous avez juste à valider, sinon il faudra saisir à présent ces informations en respectant bien cette syntaxe : nomdelatableavecousansprefix.nomduchamp . N'oubliez pas le point, n'ajoutez pas d'espace, respectez la case (majuscules, minuscules).
  2. Validez.
  3. Cochez l'une des deux cases indiquant à Merlin de traiter cette colonne lors de la création de nouveaux articles (ou déclinaison ou catégorie), ou lors des mises à jour.



A noter que pour ce type de colonnes, Merlin ne permet pas cocher uniquement la seconde case.
Vous avez le choix entre création et mise à jour ou uniquement création, ce qui répond à 99% des besoins.
Si vous souhaitez cependant absolument travailler différement ce type de données (faire des mises à jour, mais pas de création), cela reste possible avec la méthode traditionnelle consistant à :

  • Dupliquer la tâche de manière à avoir une tâche pour les créations et une autre pour les mises à jour
  • Dans la seconde tâche, dupliquer le modèle de mapping pour les différencier (pouvoir coher ou décocher les colonnes de champs personnalisés indépendament)
  • Cocher à l'étape 3 l'option permettant de remplir la colonne "Statut" avec "Existe" ou "N'existe pas" et filtrer sur cette colonne pour ne retenir selon la tâche soit que le items à mettre à jour, soit que le items à créer.



Selon la table de destination, plus exactement selon qu'il s'agisse d'une table de base comme product, product_shop, product_lang, category_lang etc... ou bien d'une table native secondaire, voir d'une table personnalisée non standard, Merlin proposera ou pas, de choisir parmis différentes manières d'importer les données.
La raison de toutes ces options possibles est que chaque table non standard peut avoir une structure différente d'une autre, un contexte mono ou multi colonnes, avec ou sans index, avec ou sans clé unique, clé unique mono colonne ou multi colonnes, être sensible ou pas au context PS (mono ou multi boutiques), présence ou pas d'une des clés de base (identifiant des produits, des déclinaisons, de la boutique, des langues, des catégories, des fournisseurs,...). Et selon cette structure, la protection contre la création de valeurs en doublon sera différente :

Gestion anti doublons

Choix possibles :

  • Valeurs uniques sans suppression : dans chaque cellule de cette colonne, une seule valeur est fournie. Elle est importée sans suppression préalable par Merlin d'éventuelles autres valeurs existantes. Ce qui ne veut pas dire qu'il n'y aura pas remplacement de valeur, cela peut être le cas si la table contient un index de type "unique" sur cette rubrique.
  • Valeurs uniques et suppression des doublons multi colonnes : dans chaque cellule de cette colonne, une seule valeur est fournie. Merlin prend l'ensemble des colonnes "libres" importées dans la même table et supprime préalablement les lignes contenant le même ensemble de valeurs que celles importées.
  • Valeurs uniques et suppression des lignes actuelles non vide : dans chaque cellule de cette colonne, une seule valeur est fournie. Merlin commence par supprimer dans la table toutes les lignes contenant déjà une valeur dans la rubrique mappée à cette colonne.
  • Listes de valeurs sans suppression : dans chaque cellule de cette colonne, une liste de valeurs est fournie. La liste est importée sans suppression préalable par Merlin d'éventuelles autres valeurs existantes. 
  • Listes de valeurs avec suppression des doublons trouvés dans cette colonne: dans chaque cellule de cette colonne, une liste de valeurs est fournie. Avant d'importer cette liste, Merlin supprime les lignes déjà existantes et contenant une valeur commune avec unes des valeurs de la nouvelle liste.
  • Listes de valeurs avec suppression des lignes actuelles non vide : dans chaque cellule de cette colonne, une liste de valeurs est fournie. Merlin commence par supprimer dans la table toutes les lignes contenant déjà une valeur dans la rubrique mappée à cette colonne.

Vous aurez noté que parmis ces options, certaines permettent d'importer non pas une valeur par cellule, mais bien une liste de plusieurs valeurs.
Imaginons en effet que votre rubrique est destinée à recevoir pour des pièces détachées, les modèles des voitures compatibles. Pour certaines pièces, ce sera plusieurs noms de modèles différents qu'il faut importer, autant le faire en une seule fois grâce à une liste.

Dans la cellule du fichier, il suffira de mettre ces valeurs séparées par le séparateur de liste défini à l'étape une, par défaut une virgule. Vous avez un exemple plus haut, à la ligne 3 de la colonne CO du fichier affiché.


Continuez en mappant de la même manière les autres colonnes du fichier.

Bon à savoir : il n'est pas utile de fermer la fenêtre de mapping, elle peut rester ouverte permettant de chainer le mapping de toutes les colonnes.


Import de rubriques natives standards non gérées par Merlin



L'intérêt de cette nouvelle fonctionnalité est plus large que vous ne pensez. L'adage "qui peut le plus peut le moins" s'applique ici. Si on peut importer de cette manière dans des champs custom que vous avez ajoutés dans la base, on peut aussi l'utiliser pour importer dans des champs standards ou natifs de PrestaShop, mais que Merlin de gère pas nativement. Quelques exemples :

  • La couleur #RGB des attributs.
  • L'adresse des fournisseurs.
  • La description des marques.
etc...  

La méthode est strictement la même. Imaginons que demain PS sorte une nouvelle version en ayant ajouté dans les tables product et product_shop un nouveau champ public_price. Ajoutez dans votre tableau deux colonnes product.public_price et product_shop.public_price, associez-les et le tour est joué, sans devoir attendre la prochaine mise à jour de Merlin. Magique non ?


Quel que soit le type de champ, la suite est inchangée pour les étapes 3, 4 et 5 et éventuellement la planification sans tâche CRON. Si vous n'avez jamais fait d'import avec Merlin Backoffice, on vous renvoie au tutoriel de base sur l'import PrestaShop.
A l'étape 3 en particulier, notez que tous les outils hyper puissants comme MagicEdit et MagicFormula fonctionnent aussi sur ce type de colonnes. Il n'y a presque aucune limite...

Avec un peu d'imagination et une bonne maitrise de ce nouvel outil vous allez pouvoir réaliser des importations irréalisables auparavant comme par exemple importer la liste des produits dans les packs et pourquoi pas  les données des champs de personnalisation dont on vous parlait en début d'article, sans la moindre ligne de code PHP ni requète sql. N'hésitez pas à partager vos expériences de ce type dans notre forum, avec les autres utilisateurs de ce module.

Autres articles de la même catégorie

Cet article vous a plu ? Partagez-le !