Prestashop : ajouter un champ personnalisé sur la fiche produit

Prestashop propose un certain nombre de champs dans la partie d’administration qui s’affichent sur les fiches produits.
Il nous est déjà arrivé sur plusieurs projets de devoir créer de nouveaux champs afin de personnaliser les fichier de vue product.tpl

Nous vous présentons un tutorial expliquant la mise en oeuvre de cette personnalisation de la fiche produit de Prestashop.

1: Modifier la base de données

Nous allons commencer par modifier la base de données de Prestashop, pour lui permettre d’accueillir un nouveau champ.
Ca se passe dans cette table: ps_products_lang. Il vous suffit d’ajouter en fin de table le champ de votre choix. Dans notre exemple, un champ de texte pour une description supplémentaire, nommé: nouveau.

2: Modifier la class ‘product’

La class product de prestashop doit être modifiée pour accueil le nouveau champ.
Dans la définition des $var dans le fichier class/products.php, ajouter :

public $nouveau;

prestashop champs 300x278 Prestashop : ajouter un champ personnalisé sur la fiche produit
Dans la fonction getTranslationsFieldsChild(), ajoutez avant la fermeture de la boucle foreach ($languages as $language):

$fields[$language[‘id_lang’]][‘nouveau’] = (isset($this->nouveau[$language[‘id_lang’]])) ? pSQL($this->nouveau[$language[‘id_lang’]], true) :  »;

prestashop champs2 300x108 Prestashop : ajouter un champ personnalisé sur la fiche produit
Remplacez

protected $fieldsValidate = array(
‘id_tax’ => ‘isUnsignedId’,
‘id_manufacturer’ => ‘isUnsignedId’,
…. couper pour pas faire trop long ….
‘active’ => ‘isBool’,
‘ean13′ => ‘isEan13′,

par

protected $fieldsValidate = array(
‘id_tax’ => ‘isUnsignedId’,
‘id_manufacturer’ => ‘isUnsignedId’,
…. couper pour pas faire trop long ….
‘active’ => ‘isBool’,
‘ean13′ => ‘isEan13′,
‘nouveau’ => ‘isCleanHtml’,

prestashop champs3 300x149 Prestashop : ajouter un champ personnalisé sur la fiche produit
Modifiez

protected $fieldsValidateLang = array(
‘meta_description’ => ‘isGenericName’, ‘meta_keywords’ => ‘isGenericName’,
‘meta_title’ => ‘isGenericName’, ‘link_rewrite’ => ‘isLinkRewrite’, ‘name’ => ‘isCatalogName’,
‘description’ => ‘isString’, ‘description_short’ => ‘isString’, ‘available_now’ => ‘isGenericName’, ‘available_later’ => ‘IsGenericName’);

par

protected $fieldsValidateLang = array(
‘meta_description’ => ‘isGenericName’, ‘meta_keywords’ => ‘isGenericName’,
‘meta_title’ => ‘isGenericName’, ‘link_rewrite’ => ‘isLinkRewrite’, ‘name’ => ‘isCatalogName’,
‘description’ => ‘isString’, ‘description_short’ => ‘isString’, ‘available_now’ => ‘isGenericName’, ‘available_later’ => ‘IsGenericName’,’nouveau’ => ‘isString’);

prestashop champs4 300x149 Prestashop : ajouter un champ personnalisé sur la fiche produit

3: Modifier du back-office de prestashop.

Afin d’afficher le champ dans le Back-office sur la fiche produit, vous devez modifier un fichier supplémentaire: tabs/AdminProduct.php .

Ajoutez à l’emplacement ou vous souhaitez voir apparaitre le nouveau champ de texte:

echo ‘
‘.$this->l(‘Nouveau:’). »;
foreach ($this->_languages as $language)
echo ‘

< textarea class= »rte » cols= »100″ rows= »20″ id= »nouveau_’.$language[‘id_lang’].' » name= »nouveau_’.$language[‘id_lang’].' »>’.htmlentities(stripslashes($this->getFieldValue($obj, ‘nouveau’, $language[‘id_lang’])), ENT_COMPAT, ‘UTF-8′).’

‘;
echo ‘

‘;

prestashop champs5 300x149 Prestashop : ajouter un champ personnalisé sur la fiche produit

4: Insérer le champ sur le fichier template.

La dernière étape consiste à appeler le nouveau champ dans votre fichier de thème prestashop: product.tpl

{$product->equipement}

2 réflexions sur “ Prestashop : ajouter un champ personnalisé sur la fiche produit ”

  1. Merci pour ce tuto qui m’aura été bien utile !

    Par contre, j’aimerais désormais accéder à un champ personnalisé de la table products depuis la page product-list.tpl… et je suis en train de m’arracher les derniers cheveux qu’il me reste !

    Si quelqu’un pouvait m’aider, je lui serais éternellement reconnaissant !
    Merci à vous

  2. Bonjour,

    Intéréssant mais à la fin de votre tuto pour le fichier template vous n’indiquer pas vers quelle ligne éxactement appeler le nouveau champ en l’occurence dans votre le nouveau champ nommer « nouveau » donc vous dite product.tpl ok ! mais ça voudrait dire d’ajouter {$product->equipement} et pourquoi et pourquoi la variable {$product->equipement} alors que nous avons nommé le champ « nouveau » et à quel niveau du fichier TPL ceci prête à confusion surtout pour les novices merci de nous donner des explication ça sera plus claire.