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 )

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 »

Prestashop : Imports des clients avec le webservice

Après la mise en place de la structure globale pour utiliser les webservices, nous allons à présent importer les clients.

La structure du fichier sera la suivante.

structure-csv

L’email client étant la clé unique.

Pour gérer l’import nous allons créer une classe spécifique qui va hériter de la classe HhPrestashopWebservice
Celle-ci permettra les opérations basiques : Ajouter, modifier, supprimer un utilisateur prestashop via le webservice.

Voici son code commenté :

 /**
 * Gestion webservice des clients
 *
 * @author hhennes <[email protected]>
 */
class HhCustomerWs extends HhPrestashopWebservice {
 
    protected $_resource = 'customers';
 
    /**
     * Création d'un client via le webservice
     * @param array $datas : données du client
     */
    public function createCustomer($datas) {
 
        $schema = $this->getEmptyObject();
        $customerAttributes = $schema->children()->children();
 
        //Parcours des attributs du client, si une data existe on l'associe
        foreach ($customerAttributes as $attribute => $values) {
 
            if (array_key_exists($attribute, $datas))
                $schema->children()->children()->{$attribute} = $datas[$attribute];
 
            //Si le champ est nécessaire et qu'il n'est pas associé cela ne fonctionnera pas, on envoie une exception
            if ($schema->children()->children()->{$attribute}->attributes()->required && !

Prestashop : Imports des clients avec le webservice Lire la suite »

Prestashop : Mise en place webservices

Voici donc le début de notre série sur les webservices prestashop ( Sommaire )

Pour cette série nous allons écrire les appels au webservice via des scripts php, basé sur la librairie fournie par Prestahop  : https://github.com/PrestaShop/PrestaShop-webservice-lib

Le projet global est disponible sur github : https://github.com/nenes25/prestashop_hhwebservices

Pour ce premier article je vais vous détailler le mode de fonctionnement de l’import

Structure globale et installation

La structure du projet sera la suivante :

Structure projet

Nos classes spécifiques de gestion seront dans le dossier « classes », et les fichiers d’imports dans le dossier « files/imports ».
L’appel des fonctions se fera via le fichier imports.php

Le module utilise composer pour gérer les dépendances et l’autoload des classes, avant toute chose il est donc nécessaire d’installer le projet via la commande

composer install

Gestion des données de l’import

Pour faciliter la gestion des données de l’import, l’objectif est de récupérer l’ensemble des données à importer sous la forme d’un tableau associatif tel que l’exemple ci-dessous

[0] => Array
        (
            [email] => [email protected]

Prestashop : Mise en place webservices Lire la suite »

Prestashop : Synchronisez vos données avec les webservices

Si vous souhaitez synchroniser les données de votre ERP avec votre site prestashop, la plateforme propose des webservices, qui permettent cela, nous allons voir tout cela dans une nouvelle série d’articles.

Pour cette série nous allons écrire les appels au webservice via des scripts php, basé sur la librairie fournie par Prestahop  : https://github.com/PrestaShop/PrestaShop-webservice-lib .

Le postulat global étant que les données à importer / exporter seront stockées au format csv

Les étapes suivantes seront détaillées :

Les liens seront mis à jour au fur et à mesure de l’avancée des articles 🙂…

Prestashop : Synchronisez vos données avec les webservices Lire la suite »

Prestashop : Envoyer des fichiers lors de la création du compte client

Lors de la création d’un compte client sur votre site, vous aurez peut-être besoin de récupérer des fichiers du client pour justifier certaines situations ( justificatif de situation , cv, ect … )
Nous allons voir comment faire pour récupérer des fichiers lors de la création du compte.

Edit : Le fonctionnement change avec prestashop 1.7 , consulter l’article pour le tutoriel actualisé : Prestashop 1.7 : Ajouter des champs clients

Avant toute chose il va falloir modifier le template du formulaire de création de compte.
Et trouver la ligne : ( sur la version 1.6.1.4 : ligne 428 ) dans le fichier authentication.tpl de votre thème.

<form action="{$link->getPageLink('authentication', true)|escape:'html':'UTF-8'}" method="post" id="account-creation_form" class="std box">

et rajouter l’attribut : enctype= »multipart/form-data »

Ce qui donne le code suivant :

<form action="{$link->getPageLink('authentication', true)|escape:'html':'UTF-8'}" method="post" id="account-creation_form" class="std box" enctype="multipart/form-data">

Ceci permettra de gérer les envois de fichiers depuis le formulaire.…

Prestashop : Envoyer des fichiers lors de la création du compte client Lire la suite »