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 )

Prestashop : Passer au déploiement continu

Vous mettez encore à jour vos sites via Ftp ? Vous perdez du temps à déployer votre code lors de chaque livraison de nouvelle fonctionnalité ?
Il est temps d’optimiser cela et de passer au déploiement continu !

Pour l’exemple nous allons voir comment mettre en place du déploiement continu sur un site prestashop de base ( version 1.6.1.x ).
L’exemple est assez basique, mais peut servir de base pour des stratégies de déploiement plus complexes.

Les prérequis étant les suivants :

  • site hébergé sur un hébergement avec accès SSH

Pour mettre en place ce processus nous allons utiliser les outils suivants :

  • git
  • gilab

Les étapes à réaliser seront les suivantes :

 1/ Création du projet sur gitlab

Pour commencer il faut s’inscrire sur gitlab.com.
Vous pouvez ensuite créer votre projet en mode public ou privé selon vos besoins.…

Prestashop : Passer au déploiement continu Lire la suite »

Prestashop 1.7 : Correction bug traduction dans controller admin d’un module

La dernière version de Prestashop 1.7 apporte de nombreux changements ( j’ y reviendrais sans doute plus longuement dans un article à venir ), et notamment dans la gestion des traductions dans l’administration.

Celle-ci se base à présent sur Symfony, tout en gardant quand même une rétrocompatibilité (théorique ) avec l’ancien système.
Les dernières recommandations ( à date ) de l’équipe Prestashop étaient de conserver l’ancien système de traduction pour les modules.

Dans le cadre de l’adaptation de l’un de mes module j’ai cependant fait face à la problématique suivante , impossible d’accéder à mon controller Admin, et affichage de la belle page d’erreur suivante :

Erreur traduction prestashop

Après analyse, du code erreur :

FatalErrorException in AdminController.php line 2735: Error: Call to a member function trans() on null

il s’avère que la fonction de traduction des modules ne marchait pas correctement dans mon cas et j’ai du surcharger cette fonction dans mon controller.

Voici donc le code qui a permis de faire fonctionner le module correctement

 /**
     * Surcharge de la fonction de traduction sur PS 1.7 et supérieur.
     * La fonction globale ne fonctionne pas
     * @param type $string
     * @param type $class
     * @param type $addslashes
     * @param type $htmlentities
     * @return type
     */
    protected function l($string, $class = null, $addslashes = false, $htmlentities = true)
    {
        if ( _PS_VERSION_ >= '1.7') {
            return Context::getContext()->getTranslator()->trans($string);
        } else {
            return parent::l($string, $class, $addslashes, $htmlentities);
        }
    }

Si vous avez aussi rencontré ce problème et trouvé une autre solution n’hésitez pas à la partager 😉…

Prestashop 1.7 : Correction bug traduction dans controller admin d’un module Lire la suite »

Optimisation des exports de bases de données pour mise à jour d’environnement de développement

En tant que développeur il est souvent nécessaire de faire des dumps de base de données pour mettre à jour les environnements de développements ( qu’ils soient locaux ou sur le serveur ).
Cependant les tables de productions sont souvent très lourdes et comportent des données qui ne sont pas forcément nécessaire pour développer.

Voici un petit script qui va vous faire gagner du temps dans l’export / import de ces bases de données.
La logique est relativement simple .

Pour les tables dont les données ne sont pas importantes, on va exporter uniquement la structure.
Puis nous excluons ces tables de l’export global.

 #!/bin/bash
 
#Variables de la base de données
host="localhost"
user="root"
pass="root"
dbname="dbname"
 
#Stockage de ces tables à ignorer dans une variables ( separer les noms par un espace)
ignoreTables="table1 table2 "
 
#Dump de la structure de ces tables
echo "Export de la structure des tables ignorées"
mysqldump -d -h $host -u $user -p$pass $dbname $ignoreTables > backup-structure.sql

Optimisation des exports de bases de données pour mise à jour d’environnement de développement Lire la suite »

Prestashop : Ne pas afficher la colonne de droite ou de gauche sur un controller

Un petit tip rapide si vous ne souhaitez pas afficher la colonne de gauche et/ou la colonne de droite dans un controller prestashop.

Pour cela rendez-vous dans la fonction initContent() du controller souhaité et ajoutez les lignes suivantes.

$this->display_column_left = false;
$this->display_column_right = false;

Les colonnes ne seront ainsi plus affichées 🙂

Attention je précise tout de même que pour les controllers du coeur de Prestashop faites cette modification via une surcharge et non directement dans les fichiers !…

Prestashop : Ne pas afficher la colonne de droite ou de gauche sur un controller Lire la suite »

Prestahop console : nouvelle version

Je viens de sortir la nouvelle version de mon module console pour prestashop 🙂

Celle-ci simplifie encore les choses puisqu’il suffit de télécharger un seul fichier phar à la racine de votre site pour bénéficier des fonctionnalités de la console 🙂
Pour rappel le précédent article : Console prestashop

Télécharger la console

wget https://github.com/nenes25/prestashop_console/raw/master/bin/prestashopConsole.phar

Ajouter les droits d’éxécution au fichier

chmod +x prestashopConsole.phar

Lancer la console

./prestashopConsole.phar

Prestahop console : nouvelle version Lire la suite »

Alternative à wampserver : windows bash

La sortie de la mise à jour Anniversary pour windows 10 au début du mois d’aout, apporte une nouveauté majeure pour les développeur webs ( sous windows bien sur ^^), à savoir l’apparition d’un sous-système linux directement intégré dans windows.

Je ne vais pas vous détailler comment l’activer vous pouvez trouver comment faire cela sur google.

La distribution proposée est Ubuntu 14.04.

Pour pouvoir développer en local il est donc nécessaire d’installer le stack lamp (Apache/Mysql,Php) , les instructions sont donc exactement les mêmes que sur un ubuntu classique, je vous renvoie donc
vers mon article sur le sujet : Ubuntu Server 14.04 « Trusty Tahr » : Installation d’apache, php et mysql ( lamp)

L’unique point à retenir est que les partitions windows sont montées dans /mnt/x/votre-dossier ( ou x correspond à la lettre de votre disque dur)
Il faut donc faire pointer vos vhosts apache vers ces dossiers.

A noter également que j’ai voulu installer nginx sans succès, pour l’instant cela ne fonctionne pas.…

Alternative à wampserver : windows bash Lire la suite »

EicmsLinks : nouvelles fonctionnalités.

Une nouvelle version de mon module prestashop « EicmsLinks » est disponible.
Pour rappel ce module rajoute des liens dynamiques dans l’éditeur de texte tinyMce pour les contenus cms ( pages cms, descriptions produits, descriptions catégories)

  • pages cms
  • catégories
  • produit ( lien produit, ou ajout au panier)

Pour la description complète vous pouvez lire la page suivante : https://www.h-hennes.fr/blog/prestashop-liens-dynamiques-dans-lediteur-tinymce/

Cette nouvelle version instaure une nouvelle notion de « widgets » qui peuvent également être inséré directement dans la page cms.

Pour l’instant les widgets implémentés sont les suivants :

formulaire de login : permets d’afficher le formulaire de login dans n’importe quelle page cms

Widget login

liste de produits : permets d’afficher une liste de produits dynamique

Widget produits

Plusieurs options sont disponibles pour ce widget :
-type (new|category|price_drop) : Type de produits à afficher
-nb_products : nombre de produits à afficher
-id_category : dans le cas d’un affichage de produit d’une catégorie, identifiant prestashop de la catégorie.

L’ajout de cette fonctionnalité a été réalisée de manière à pouvoir rajouter très facilement des nouveaux widgets.…

EicmsLinks : nouvelles fonctionnalités. Lire la suite »

Console Prestashop

Tout ceux qui travaillent sous Magento ou Symfony le save, la ligne de commande est la meilleure amie du développeur pour gagner du temps 🙂
J’utilise très régulièrement l’outil Magerun : https://github.com/netz98/n98-magerun  qui permets de réaliser pleins d’actions depuis la ligne de commande

Ce type d’outil n’existe pas (encore) sous Prestashop.
Ceci arrivera sans doute pour les prochaines versions, comme Symfony est amené à devenir le cœur de la solution :-).

En attendant voici donc un nouvel outil de console pour Prestashop.
Il est basé sur le composant console de Symfony2 et disponible sur mon compte github : https://github.com/nenes25/prestashop_console

Pour l’utiliser les prérequis sont les suivants :

  • accès ssh à votre hébergement
  • composer installé

Voici comment l’installer rapidement.

Edit : Utiliser plutôt le nouveau mode de fonctionnement : https://www.h-hennes.fr/blog/2016/09/19/prestahop-console-nouvelle-version/

Clonez le dépôt à la racine de votre site, ceci créera un dossier « PrestashopConsole »

git clone https://github.com/nenes25/prestashop_console.git PrestashopConsole

Rendez-vous dans le dossier et installer les composants avec composer

composer install

Puis vous pouvez lancer la console, et voir les commandes disponibles.…

Console Prestashop Lire la suite »

Optimiser le développement de modules Prestashop : Éviter les régressions avec l’intégration continue

Cet article fait partie de la série : Optimiser le développement de modules Prestashop

  1. Mise en place de l’environnement de développement
  2. Industrialiser l’installation de Prestashop et des modules
  3. Tester fonctionnellement vos modules avec Phpunit et Selenium
  4. Éviter les régressions avec l’intégration continue

Pour finir notre série sur le développement de modules Prestashop, nous allons nous intéresser à l’intégration continue.
L’objectif de celle-ci est de nous assurer que tout fonctionne correctement lorsque nous faisons évoluer notre module. ( c’est à dire que les changements apportés n’entrainent pas l’apparition de nouveaux problèmes ou régressions )

Pour cela nous avons dans l’étape précédente écrits des tests fonctionnels qui sont chargés de vérifier que tout fonctionne correctement. Nous souhaitons donc que ces tests soient lancés automatiquement lors de la publication de chaque modifications.

Plusieurs possibilités existent pour réaliser ce suivi, mais je vais vous présenter une solution basée sur jenkins

Installation de jenkins

Pour l’installer connectez-vous à votre machine virtuelle et saissez les commandes suivantes :

wget -q -O - https://jenkins-ci.org

Optimiser le développement de modules Prestashop : Éviter les régressions avec l’intégration continue Lire la suite »

Prestashop : Mise en place de logs rapides dans un fichier

Voici un code qui vous permettra de logguer facilement et rapidement les informations souhaitées sous Prestashop dans le fichier de votre choix.

L’objectif est de pouvoir logguer les informations souhaitées en une seule ligne, sans avoir à instancier de classe de log.
(Le fonctionnement est comparable à la fonction Mage::log() de Magento )

Créer une nouvelle classe dans le dossier override/classes/CustomLogger.php

 <?php
class CustomLogger
{
 
    /** Fichier de log par défaut */
    const DEFAULT_LOG_FILE = 'system.log';
 
    /**
     * Log
     * @param string|array|object $message element à logger ( 1 type à la fois )
     * @param string $level niveau de log
     * @param string $fileName nom du fichier de log
     */
    public static function log($message, $level = 'debug', $fileName = null)
    {
 
        $fileDir = _PS_ROOT_DIR_ . '/log/';
 
        if (!$fileName)
            $fileName = self::DEFAULT_LOG_FILE;
 
        if (is_array($message) || is_object($message)) {
            $message = print_r($message, true);
        }
 
        $formatted_message = '*' .

Prestashop : Mise en place de logs rapides dans un fichier Lire la suite »