Prestashop : Créer un champ de type texte pour les produits

Ajoutez des champs de type texte dans la fiche produit, testée et approuvée sur PS 1.6.0.14 et PS 1.6.1.5

Dans un projet Prestashop qu’on a traité, le client voulait saisir deux titres pour un produit donné, il voulait l’afficher dans la fiche produit juste au dessous du libellé du produit. Dans notre cas il s’agit donc d’un champ de type texte.

Voici les étapes à suivre pour ajouter un champ “text” à la fiche produit. Ici on va ajouter un nouveau champ de type texte appelle “Titre 2” :

1- Ajouter le champ dans la base de données

Dans votre base de données via phpMyAdmin (par exemple) , ajouter une colonne “titre2” de type VARCAHR(200) dans la table PREFIX_product_lang

2- Surcharger la classe Product

Il va falloir surcharger la classe qui modélise les produits : ProductCore.
Créer le fichier /override/classes/Product.php (créer les dossiers s’ils n’existent pas) et insérez le code suivant :

<?php
class Product extends ProductCore
{
 /** @var string titre2*/
 public $titre2;
 public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
 {
 Product::$definition['fields']['titre2'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isString');
 parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
 }
}

Attention : supprimez le fichier /cache/class_index.php afin que la surcharge soit bien prise en compte (le fichier se régénèrera tout seul)

3- Afficher le champ dans le back office

Copiez le fichier /admin/themes/default/templates/controllers/products/information.tpl dans le dossier /override/controllers/admin/templates/products/ (dossiers à créer si nécessaire) Ouvrez ce fichier, copiez et modifiez le code ci-dessous là ou vous souhaitez que le champ apparaisse (dans notre cas juste après le libellé du produit) :

<div class="form-group">
 <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="titre2" type="default" multilang="true"}</span></div>
 <label class="control-label col-lg-2 required" for="titre2_{$id_lang}">
 <span class="label-tooltip" data-toggle="tooltip" title="{l s='2eme nom du produit.'} {l s='Invalid characters:'} &lt;&gt;;=#{}">
 {l s='titre2'}
 </span>
 </label>
 <div class="col-lg-5">
 {include
 file="controllers/products/input_text_lang.tpl"
 languages=$languages
 input_name='titre2'
 input_value=$product->titre2
 }
 <p class="clear"></p>
 </div>
</div>

4- Afficher le champ dans le front office

Il suffit simplement d’insérer le code suivant là où vous le souhaitez dans ./themes/votre_theme/product.tpl :

{$product->titre2}
Source : http://www.geraudlacheny.fr/ajouter-champ-personnalise-produit-prestashop/

8 commentaires concernant “Prestashop : Créer un champ de type texte pour les produits

    • Bonjour,
      Il y avait en fait une petite erreur : le dossier à créer pour mettre à jour l’admin s’appelle “templates” (avec un ‘s’)
      Veuillez refaire la manipulation, faites bien attentions lors des copiers/coller (les ” et les ‘ peuvent être modifiés, il faut s’assurer qu’ils sont bien écris). N’oubliez pas de supprimer le fichier /cache/class_index.php.
      Si le problème persiste merci de fournir une capture d’écran du message d’erreur (et indiquer à quel niveau vous avez l’erreur : sur le back office ou le front office ?)

  • Bonjour,
    J’ai toujours l’erreur suivante :
    ## Une erreur s’est produite pendant la mise à jour de l’objet. product () ##

    J’ai voulu remettre mes fichiers comme avant mais l’erreur reste, je ne sais pas quoi faire.
    Pouvez vous m’aider ?

    • Bonjour,
      Quand vous dites “J’ai voulu remettre mes fichiers comme avant …” j’en déduis que vous avez modifié le noyau de Prestashop !! Attention les fichiers relatif à ce tuto sont dans le dossier override, si vous êtes le seul à travailler sur le projet vous devriez avoir un dossier vide et vous l’alimentez au fure et à mesure … Si c’est bien le cas, le fait de supprimer les fichiers créés et de supprimer aussi le fichier de cache devrait remettre votre site à son état d’origine !

      • Bonjour,

        Merci pour votre réponse rapide.
        Je n’ai modifié/ajouté que les fichiers dans le dossier “override” et j’ai remis comme avant. Par contre le fichier class_index.php que j’ai supprimé n’est pas réapparu est-ce normal ?

      • Je viens de trouver l’erreur c’était lié à ma base de données qui n’était pas bonne. L’importation ne se faisait pas comme il faut.
        Merci encore de m’avoir répondu.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*