Prestashop

Logo PrestashopPrestashop est une solution e-commerce facile et pratique à mettre en œuvre.
C’est également une plateforme sur laquelle je travaille quotidiennement depuis presque 10 ans.
A travers une centaines d’articles écrits durant cette période, j’ai creusé de nombreuses problématiques liées à cette solution, des versions 1.4.x jusqu’aux dernières versions 1.7
J’ai également partagé des canevas de modules et creusé des points spécifiques de la solution, essentiellement une vision orientée module ( ç’est à dire comment interagir le plus simplement avec Prestashop via un module )

Mise en place d’une plateforme d’intégration continue ( Partie 1 )

Afin de suivre le bon déroulement de vos projets, il est important de pouvoir tester de manière régulière que votre applications fonctionne bien.
Ceci peut être réalisé via la mise en place de tests unitaires et fonctionnels, d’analyse de code etc…

Pour suivre cela de manière optimale, la mise en place d’une plateforme d’intégration continue est la suite logique de l’évolution de votre projet dès lors qu’il atteint une taille importante, ou qu’il comporte de nombreuses fonctionnalités spécifiques.

Il existe plusieurs plateforme pour réaliser cela, mais je vais me baser sur la plus connue : Jenkins (ex Hudson )

L’objectif à la fin de ce guide est d’avoir une plateforme de tests fonctionnels opérationnelle.
Celle ci-sera basée sur phpunit et selenium et firefox en mode headless
La procédure étant assez longue, ce sujet va être séparé en 2 articles :

– Installation des éléments nécessaires aux tests fonctionnels
– Installation et configuration de jenkins pour l’exécution des tests fonctionnels

Installation des éléments nécessaires aux tests fonctionnels.

Bonnes pratiques : Mise en place d’un environnement de développement normalisé avec NetBeans

Avec leur multiples contributeurs, la maintenabilité des solutions open-source est relativement complexe.
C’est pourquoi celles-ci instaurent des normes de développement qui garantissent la qualité et l’apparence du code.
Ces normes peuvent avoir pour nom « PSR-1 », « PSR-2 » etc..

Je vais vous détailler comment mettre en place un environnement de développement qui vous permettra de suivre au mieux ces normes.
Selon les développeurs, l’éditeur peut varier, pour ma part j’utilise NetBeans au quotidien et j’en suis vraiment très satisfait.

Je vais donc vous détailler comment procéder pour tout configurer avec cet éditeur 🙂 sous Windows
( Certains points sont communs à l’ensemble des éditeurs // Cette méthode ne prétends pas être la meilleure mais détaille l’ensemble des étapes nécessaires à la mise en place)

Installation de Wampserver

Télécharger le fichier d’installation en 32 ou 64 bits en fonction de votre ordinateur depuis le site : http://www.wampserver.com/
Procéder à l’installation standard de Wampserver dans sa dernière version.
( Nous partirons du postulat que Wamp sera installé dans le dossier c:/wamp/ )

Une fois l’installation de wampserver effectuée, il faut se connecter à la console Windows ( Touches Windows + R / puis cmd )
Puis il faudra se rendre dans le dossier c:/wamp/bin/php/php.x.x.x

Prestashop 1.4 : Afficher le prix produit sans l’écotaxe

Par défaut l’affichage du prix des produits sous Prestashop ( version 1.4 ) inclus l’écotaxe dans son montant.
Si pour différentes raison il vous est nécessaire de modifier cet affichage voici comment l’afficher sans l’écotaxe.

Pour commencer il est nécessaire de surcharger la classe Product dans le fichier override/classes/Product.php
Dans cette classe nous allons ajouter 2 fonctions qui vont récupérer les prix sans l’écotaxe.

<?php
 
/**
 * Surcharge de la classe produits
 *
 */
class Product extends ProductCore {
 
 
    /**
     * Reprise de la fonction getPrice mais en appellant la fonction getProductPriceStatic avec le paramètre ecotaxe à false
     *
     * @param boolean $tax With taxes or not (optional)
     * @param integer $id_product_attribute Product attribute id (optional)
     * @param integer $decimals Number of decimals (optional)
     * @param integer $divisor Util when paying many time without fees (optional)
     * @return float Product price in euros
     */
    public function getPriceWithoutEcotax($tax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1) {
        return Product::getPriceStatic((int) ($this->id), $tax, $id_product_attribute, $decimals, $divisor, $only_reduc, $usereduc, $quantity,false, NULL, NULL, NULL, $this ,false);
    }
    
    /**
     * Reprise de la fonction getPrice mais en appellant la fonction getProductPriceStatic avec le paramètre ecotaxe à false
     *
     * @param boolean $notax
     * @param intege $id_product_attribute
     * @return float Product price in euros
     */
    public function getPriceWithoutReductWithoutEcotax($notax = false, $id_product_attribute = false)
    {
        return Product::getPriceStatic((int)($this->id), !

Prestashop 1.4 : Créer un controller Front Office pour un module

Dans sa version 1.4, la gestion des controllers front office des modules n’est pas aussi optimisée que sur les versions suivantes.
Malgré tout cette version reste encore assez utilisée sur des anciennes boutiques.

Voici donc comment créer « proprement » un module qui disposera d’un controller front office.
Par proprement j’entends un module qui déposera les fichiers nécessaires aux bons emplacements, et qui peut être désinstallé sans laisser de traces 🙂

Le nom du module sera « sample » et sa structure sera la suivante :

Structure du module sample

Les contenus des fichiers css,js et tpl n’ayant pas d’importance je ne détaillerais pas leur contenu. ( il s’appelleront respectivement sample.css , sample.js et sample.tpl )

Voici le contenu du fichier de gestion du module « sample.php »
C’est dans ce fichier via les fonction _installModuleController et _uninstallModuleController que le controller Front office du module est bien installé ou supprimé

<?php
 
if (!defined('_PS_VERSION_'))
exit;
 
class Sample extends Module {
 
/** Nom de la page Front Office du module */
private $_module_page_name = 'sample_front_office_page';
 
 
public function __construct() {
 
$this->name = "sample";
$this->tab = "others";
$this->version = '0.1.0';
$this->author = "Hennes Herve";
$this->need_instance = 0;
 
parent::__construct();
$this->displayName = $this->l("Sample Module");
$this->description = $this->l("Sample module with front controller");
}
 
/**
* Installation du module
*/
public function install() {
 
//Installation Standard du module
if (!

Prestashop : Installer des modules sans passer par l’administration

Voici un module Prestashop qui vous permettra d’installer un module en appelant directement une page web ( depuis un navigateur ou la ligne de commande )

Ceci peut être pratique dans le cas ou il est nécessaire de déployer un module sur de nombreux sites différents

Une fois les fichiers déposé par ftp sur l’hébergement concerné , il vous suffit d’appeller la page http://www.site.com/modules/eiinstallmodulescli/install_module.php?module_name=module_name et le module sera automatiquement installé.

Le code exécuté est des plus basiques :-p , mais de mon côté cela m’a déjà permis de gagner pas mal de temps 🙂

require_once(dirname(__FILE__).'/../../config/config.inc.php');
 
//Nom du module à installer
$module_name = Tools::getValue('module_name');
 
if ( $module_name ) {
 
	//Inclusion de la classe du module
	if ( ! is_file(dirname(__FILE__).'/../'.$module_name.'/'.$module_name.'.php' ) )
		die (' Erreur : Impossible d\'inclure le fichier du module');
 
	include_once ( dirname(__FILE__).

Prestashop : Tri des produits et catégories par Ordre alphabétique

Voici comment lister les produits et les catégories Prestashop par ordre alphabétique :

( Cette méthode est valide avec prestashop 1.4.x et prestashop 1.5.x , je ne l’ai pas testé avec la version 1.6 )

Les procédures à exécuter sont les suivantes :

  • Ordre des catégories dans le module blockCatégories
  • Ordre des produits dans les préférences produits
  • Override de la récupération des sousCatégories

 

Ordre des catégories dans le module blockCatégories :

Dans l’administration « modules » , rechercher le module « bloc catégories »
Block Catégories Prestashop
Dans la configuration du module ,  cocher « par nom » dans l’option Trier et sauvegarder

Ordre des produits dans les préférences produits

Dans l’administration « Préférences » puis « Produits »

Tri des produits prestashop

Dans « pagination / Tri par défaut » sélectionner l’option « Nom  du produit » et sauvegarder

Override de la récupération des sousCatégories

Afin de pouvoir trier les sous catégories d’une catégorie par ordre alphabétique il va être nécessaire d’overrider la fonction getSubCategories de la class « Category »
Créer donc un fichier Category.php…

Prestashop : Ajouter un éditeur wysiwyg sur la description des catégories ( Prestashop 1.5 )

En complément de mon précédent article : Prestashop : Ajouter un éditeur wysiwyg sur la description des catégories qui était uniquement applicable aux versions 1.4.xx , voici comment réaliser cette action sur prestashop 1.5

Pour ceux qui ne souhaitent pas mettre les mains dans le code , vous pouvez télécharger directement le module  qui se charge de tout  : eicategoriesdescription
(Attention ce module réalise un override, si un autre module override la même fonction, des problèmes peuvent apparaitre )

La manipulation est relativement facile à réaliser.

Créer un nouveau fichier AdminCategoriesController.php dans le dossier  « override/controllers/admin/ »

Copier / Coller la fonction « renderForm » dans votre nouveau fichier.

Rechercher le contenu suivant

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

Prestashop : installer rapidement une version de développement avec bash

Lors du développement de modules Prestashop, il est utile de tester son fonctionnement sur l’ensemble des version de Prestashop.
Cependant le processus d’installation d’une version spécifique de Prestashop fait perdre pas mal de temps à chaque fois.

Voici donc un script bash qui m’a permis d’industrialiser l’installation de Prestashop sur mon serveur de développement.

/!\ Ce script  est une version beta qui nécessite d’être utilisée avec précautions, et ou de nombreuses améliorations sont possibles, il fonctionne uniquement pour les versions de Prestashop supérieures à la version 1.5.4.1 ( qui disposent de l’installation CLI )
Les postulats de départ sont les suivants :

  • L’utilisateur qui exécute la commande ssh à les droits de création / modification / exécution sur l’ensemble des dossier et la création de base de données
  • L’ensemble des versions de prestashop seront installée sur le même nom de domaine dans un sous-dossier « /prestashop/ »
  • Le nom du dossier de chaque version sera sous la forme « prestashop_1-x-x-x »
  • Chaque version disposera de sa propre base de données
  • Les mots de passe admin et base de données seront toujours les mêmes
#!/bin/bash

Prestashop : Liens dynamiques vers les pages cms dans l’éditeur TinyMce

La gestion des liens entre les différentes pages cms est relativement peu aisée avec PrestaShop, il est nécessaire de saisir le lien complet à chaque fois.
Cette problématique est d’autant plus importante lorsqu’on est amené à travailler avec plusieurs urls ( serveur local, serveur de préproduction, serveur de production)

En partant de ce constat j’ai décidé de créer un nouveau module qui permettra de rendre ces liens « dynamiques »  (c’est à dire indépendant de l’url de base du site)

Ce module fonctionne uniquement à partir de Prestashop 1.5.

Son fonctionnement est inspiré du fonctionnement des liens cms sous magento ( et oui encore 😉 ).

Voici un aperçu du rendu final du module.

lien cms prestashop

Un nouvel icône apparait dans la barre d’outils de TinyMce.

pages-cms

Lorsqu’on clique dessus, le listing complet des pages cms existantes apparait et il vous suffit de cliquer sur l’élément que vous souhaitez ajouter pour insérer un lien.

Edit 2015-05-20 :

Pour récupérer la dernière version du module et consulter les instructions d’installation, vous pouvez vous rendre directement sur la page :
Prestashop : Liens dynamiques dans l’éditeur wysiwyg tinymce

 …

Module (re) captcha pour le formulaire de contact prestashop nouvelle version

Suite aux différents retours sur mon module recaptcha pour prestashop , Je viens de procéder à sa mise à jour.

La version 0.1.1 apporte un changement important dans son mode de fonctionnement
Car comme évoqué dans le commentaire suivant , la soumission d’un mauvais code de captcha nécessitait de saisir à nouveau l’ensemble des données du formulaire.

Désormais la validation du code du captcha est donc réalisée en ajax avant la soumission du formulaire.
Si le code est validé, le formulaire de contact est soumis, sinon un message d’erreur s’affiche et l’utilisateur doit saisir un nouveau captcha.

Edit : 17/01/2014
La version 0.1.2 est désormais disponible et corrige l’incompatibilité du module avec le mode SSL de prestashop.

Edit : 05/05/2014
La version 0.1.3 est désormais disponible et corrige un problème de soumission du captcha en mode SSL

Edit : 15/05/2014La version 0.1.4 compatible avec Prestashop 1.6 est désormais disponible

Vous pourrez télécharger cette version et consulter les dernières mise à jour du module depuis la page Module (re)Captcha pour le formulaire de contact prestashop