Étiquette : prestashop

[Prestashop 1.6+] Créer un override pour un module

Depuis la version 1.6, les équipes de Prestashop ont mis en place (enfin !) un système d’override des modules, propre et natif.

Dans ce tutoriel, je vais vous montrer comment l’utiliser et vous vous en rendrez compte, c’est très simple.

Admettons que nous souhaitons greffer le module « blocksearch » dans le hook displayFooter.

Commençons par :

  1. Créer un dossier du nom du module (ici « blocksearch ») dans le dossier /override/modules
  2. Dans ce fichier, créer le fichier « blocksearch.php »

 

Nous allons maintenant éditer ce fichier. D’abord, déclarons la classe :

<?php

class BlockSearchOverride extends BlockSearch {


}

Vous noterez que la spécificité de ce nouveau système d’override est ainsi l’ajout du suffixe « Override » au nom de la classe (au lieu de « Core » pour les classes ou les controllers).

 

Enfin, pour ajouter le hook en question, rien de plus simple :

public function hookDisplayFooter($params) {
	return $this->hookTop($params);
}

Il ne vous reste plus qu’à vider le cache de l’autoload en utilisant l’une de ces méthodes :

  • Back-office > Paramètres avancés > Performances : bouton « Vider le cache » en haut à droite
  • Suppression du fichier /cache/class_index.php

Le tour est joué !

[Prestashop] Au secours ! Paypal ne fonctionne plus sur ma boutique !

Si vous êtes ici, c’est que comme toutes les personnes ayant installé le module Paypal sur leur boutique, celui-ci ne fonctionne plus.

Ce qui est sympa pour vous, c’est que je vais vous dire comment y remédier !

 

La cause du bug m’est encore inconnue. Tout ce que je peux vous dire, c’est que Paypal a du modifier son appel API / webservice (que sais-je ?) et ainsi, votre module ne fait plus le lien.

 

La résolution du bug, elle, est facile. Il vous suffit de mettre à jour votre module.

Vous pouvez soit le faire directement depuis votre back-office, soit en passant par Addons.

Pour cela, rendez-vous sur Prestashop Addons et téléchargez le module. Dans votre back-office, uploadez-le ensuite comme n’importe quel module et le tour est joué 😉

 

Important : Normalement, la mise à jour conserve tous vos identifiants Paypal. Sauvegardez tout de même vos identifiants avant de faire la mise à jour.

[Prestashop 1.5+ | 1.6+] Ajouter un champ pour les catégories et activer l’éditeur

Pour faire suite à l’article précédent « Ajouter un champ zone de texte (textarea) sur la page produit de Prestashop« , voici maintenant la solution (cette fois-ci trouvée par mes soins) pour :

  • Ajouter un nouveau champ (dans cet exemple texte) pour les catégories
  • Activer l’éditeur de texte TinyMCE sur les textareas (zones de texte).

Pour cet exemple, j’ai souhaité ajouter un deuxième champ de description qu’on appellera ici description_2.

 

NOTE : Ce tuto fonctionne pour tous les autres contenus (sauf produits) : pages CMS, magasins, etc. Ils vous suffit d’adapter les classes et controllers à modifier.

 

I ) Modification de la base de données

Pour commencer, connectez-vous à votre base de données et rendez-vous dans la table _PREFIX_category_lang.

Ajoutez un champ « description_2 » de type « Text ».

 

II ) Modification de la classe Category

Rendez-vous dans /override/classes/Category.php et collez-y ce code :

public $description_2;

public static $definition = array(
	'table' => 'category',
	'primary' => 'id_category',
	'multilang' => true,
	'multilang_shop' => true,
	'fields' => array(			
		'nleft' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
		'nright' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
		'level_depth' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
		'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true),
		'id_parent' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
		'id_shop_default' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
		'is_root_category' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
		'position' => array('type' => self::TYPE_INT),
		'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
		'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),

		// Lang fields
		'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64),
		'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 64),
		'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),
		'description_2' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),
		'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
		'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
		'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
	),
);

 

III ) Modification du controlleur administrateur AdminCategoriesController

Copiez les fonctions __construct(), getDescriptionClean() et renderForm() du fichier /controllers/admin/AdminCategoriesController.php.

Les coller dans : /override/controllers/admin/AdminCategoriesController.php.

 

Important : Modifiez la ligne parent::_construct() de la fonction __construct par AdminController::__construct();

 

Nous allons maintenant apporter les modifications nécessaires sur le modèle du champ « Description ».

 

Fonction __construct();

Copiez l’array « Description » (lignes 31 à 37 environ) et coller juste au dessous, en remplaçant tout par description_2:

'description' => array(
	'title' => $this->l('Description'),
	'width' => 500,
	'maxlength' => 90,
	'callback' => 'getDescriptionClean',
	'orderby' => false
),
'description_2' => array(
	'title' => $this->l('Description 2'),
	'width' => 500,
	'maxlength' => 90,
	'callback' => 'getDescription2Clean',
	'orderby' => false
),

 

Fonction getDescriptionClean()

Modifiez cette fonction comme suit :

public static function getDescription2Clean($description)
{
	return strip_tags(stripslashes($description));
}

 

Fonction renderForm()

Localisez le code suivant dans cette fonction :

array(
	'type' => 'textarea',
	'label' => $this->l('Description:'),
	'name' => 'description',
	'lang' => true,
	'rows' => 10,
	'cols' => 100,
	'hint' => $this->l('Invalid characters:').' 
),

Dupliquez-le juste au dessous et remplacez tout les « description » par description_2.

array(

	'type' => 'textarea',
	'label' => $this->l('Description 2:'),
	'name' => 'description_2',
	'lang' => true,
        'autoload_rte' => true,  
	'rows' => 10,
	'cols' => 100,
	'hint' => $this->l('Invalid characters:').' 
),

 

Afin d’activer l’affichage de l’éditeur de texte riche TinyMCE sur ces pages, rajoutez aux champs description et description_2 (toujours dans la fonction renderForm), la ligne suivante :

'autoload_rte' => true,

 

Depuis la version 1.5.5, il faut remplacer la dernière ligne de la fonction (return parent::renderForm();) par return AdminController::renderForm();.

Merci à Kaby et Guillaume qui ont trouvés la solution.

 

IV) Appel dans le template

Pour finir, appelez simplement ce nouveau champ dans /themes/votre_theme/category.tpl comme suit et à l’endroit souhaité :

{$category->description_2}

Voilà, votre nouveau champ texte est créé ! N’hésitez pas à laissez un commentaire ci-dessous si vous rencontrez un problème.