Étiquette : back-office

[Prestashop 1.5+ | 1.6+] Ajouter un champ zone de texte (textarea) produit

Voici aujourd’hui une solution pour ajouter un champ de type « textarea » dans la gestion des produits sur Prestashop 1.5+.

Cette technique fonctionne à partir de la version 1.5.3 de Prestashop. Pour les versions 1.4.x, consultez ce tutoriel : Ajouter un champ avec éditeur sur la page produit de Prestashop 1.4.x

Ce tuto est fonctionnel pour les versions 1.5 et 1.6.

Voici donc comment nous allons pouvoir rajouter un champ « Points Forts » sur les fiches produit.

 

I ) Ajout du champ dans la base de données

Rendez-vous dans votre base de données et ajoutez un champ « pointsforts » de type « Text » dans la table PREFIX_product_lang.

 

II ) Modification de la classe Product

Versions 1.5.3.x : Rendez-vous dans /override/classes/Product.php. Ajoutez-y les lignes suivantes :

public $pointsforts;

public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{
  Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
  parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
}

 

Versions 1.5.4+ : Si vous avez une version de Prestashop supérieure ou égale à celle-ci, vous devez créer le fichier d’override « Product.php » dans /override/classes/. Son contenu doit ressembler à cela dans le cas présent :

<?php

class Product extends ProductCore
{
	public $pointsforts;

	public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
	{
	  Product::$definition['fields']['pointsforts'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
	  parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
	}

}

 

III ) Modifier la vue backoffice

Rendez-vous dans admin/themes/default/template/controllers/products/informations.tpl et copiez ce fichier.

Collez-le ensuite dans /override/controllers/admin/templates/products/informations.tpl

En s’inspirant de la ligne 290, collez le code suivant, qui va créer le champ texte :

<tr>
	<td class="col-left">
		{include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
		<label>{$bullet_common_field} {l s='Points forts :'}<br /></label>
		<p class="product_description">({l s='Les points forts du produit'})</p>
	</td>
	<td style="padding-bottom:5px;">
		{include file="controllers/products/textarea_lang.tpl" languages=$languages
			input_name='pointsforts'
			input_value=$product->pointsforts
		}
		<p class="clear"></p>
	</td>
</tr>

 

IV ) Affichage en front-office

Il ne vous reste plus qu’à afficher ce champ en front-office. Pour ce faire, modifiez le fichier /themes/votre_theme/product.tpl et ajoutez ce qui suit à l’endroit que vous souhaitez :

{$product->pointsforts}

Si vous souhaitez afficher la valeur de votre nouveau champ sur la page des catégories, rendez-vous dans /classes/Category.php et copiez la fonction getProducts() (ligne 742 approximativement).

Collez cette fonction dans le fichier /override/classes/Category.php (à créer s’il n’existe pas), et modifiez-y la requête ($sql) , en rajoutant pl.pointsforts dans le SELECT.

 

Çà ne fonctionne pas ?

Solution 1

En cas de problème, vérifiez que la compilation est bien désactivée.

Pour cela, rendez-vous dans Paramètres avancés > Performances et modifiez les options suivantes :

  • Cache des templates : Forcer la compilation à chaque appel
  • Cache : Non (X)
  • Pour les versions 1.5.6, cliquez aussi sur le bouton « Effacer le cache de Smarty et le cache de l’Autoload ».

Une fois cela fait, réessayez. Cela devra fonctionner.

Si tout est bon, pensez cependant à re-modifier ces informations et de les remettre sur :

  • Cache des templates : Ne jamais recompiler les fichiers de templates
  • Cache : Oui

Sans quoi, votre site va se mettre à ramer horriblement.

 

Solution 2

De plus, si vous venez de créer les fichiers overridés spécifiquement pour ce tuto, il est impératif de vider le cacher de l’autoload.

Pour ce faire, vous pouvez :

  • supprimer le fichier class_index.php dans le dossier /cache
  • en 1.5.5+, aller dans Préférences > Performances et en cliquant sur « Vider le cache » dans la toolbar

Si vous rencontrez toujours un problème, n’hésitez pas à laisser un commentaire ci-dessous.