Archives pour la catégorie ‘ Prestashop’

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.…

10 commentaires

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
Pas de commentaires

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 = '*' .
Pas de commentaires

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 && !
Pas de commentaires

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]
Pas de commentaires

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 🙂…

1 commentaire

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.…

27 commentaires

Prestashop : Ajouter vos traductions dans les fichiers de traductions

J’ai encore rencontré récemment le problème bien connus des utilisateurs de prestashop qui souhaitent changer les traductions depuis le back-office.

L’erreur d’affichage des champs de formulaire « max_input_vars » qui empeche d’afficher les traductions, et donc de les modifier depuis l’administration.

J’avais apporté une solution il y’a plusieurs années pour corriger ce problème sur un hébergement mutualisé ovh : Prestashop problème max_input_vars en hébergement mutualisé chez ovh ( Elle ne doit plus fonctionner malheureusement )

Dans le cas de ceux qui disposent d’un serveur dédié avec les accès nécessaires, la modification du php.ini corrige rapidement ce problème.

Pour mon problème j’avais uniquement quelques traductions à réaliser, l’ajout des informations de traductions directement dans les fichiers de traductions est donc une solution envisageable.

Le fonctionnement est assez simple , la clé de traduction est construite de la manière suivante

<{nomModule}nomTheme>nomFichier_md5(cleTraduction)

Cette clé de traduction est ajoutée dans la variable $_MODULE , qui contient toutes les traductions.…

1 commentaire

Prestashop : Ajouter des champs au formulaire de contact

C’est une demande assez régulière , comment ajouter facilement des nouveaux champs sur le formulaire de contact prestashop ?
Avec le code de base il n’est pas évident de rajouter des champs car il n’existe aucun hook particulier qui permets d’utiliser un module sur cette page.

J’ai donc réalisé un nouveau module qui va permettre de rajouter des éléments de manière plus simple.
Ces nouveaux champs seront ensuite envoyés dans l’email récapitulatif au marchand.
( C’est une version basique de preuve de concept qui peut encore grandement évoluer 🙂 , testé uniquement sur la dernière version 1.6.1.4)

Vous pouvez le télécharger depuis github : https://github.com/nenes25/prestashop_contactformfields

Cependant il est pour l’instant nécessaire de comprendre son fonctionnement, et d’éditer du code pour pouvoir ajouter les nouveaux champs.

Avant d’installer le module , il faut éditer le fichier contact-form.tpl de votre thème.
Rajouter le code suivant à l’endroit ou vous souhaitez que les nouveaux champs apparaissent

{* Nouveaux champs pour le formulaire de contact : ce code créé un nouveau hook pour les modules *}
{hook h='contactFormAdditionnalFields'}

Vous pouvez à présent installer le module et sur la page du formulaire de contact vous devez avoir le visuel suivant :

Nouveaux champs

Ajout visuel des nouveaux champs

Le visuel et les noms des nouveaux champs sont éditables dans le fichier

contactformfields/views/templates/hook/hookContactFormAdditionnalFields.tpl…

23 commentaires

Prestashop : Ajouter automatiquement les clients à un groupe lors de l’inscription

Afin de segmenter vos clients dans prestashop, il est utile de les ranger dans des groupes clients spécifique.
Ce nouveau module Prestashop, vous permettra d’assigner automatiquement les clients aux groupes souhaités dès leur inscription en fonction de paramètres prédéfinis.

Pour l’installation, comme pour tous mes modules hébergés sur github, l’installation par zip ne fonctionne pas.
Il est nécessaire de déposer le dossier « customerautogroups » , dans le dossier « modules » de votre site via FTP.

Une fois le module installé, un nouvel onglet est disponible dans l’administration, dans « client/ Customer Auto Groups »

Autogroups menu

Vous pouvez ensuite accéder à la liste des règles et créer vos nouvelles règles.

Liste règles auto groupes

 

Les règles sont cumulables et priorisables.

Voici par exemple le formulaire d’édition d’une règle, qui ajouter automatiquement tous les client  qui sont des hommes ( çad dont le champ Client « id_gender » = 1 ) dans un groupe client « Hommes »

customerautogroups

Les conditions possibles sont liées à tous les champs des classes Customer et Address.…

176 commentaires


Archives

Compte Github