Archives pour la catégorie ‘ Prestashop’

Prestashop : Module Dashboard

Nous allons voir en détails comment réaliser un module dashboard sur prestashop ( Ce tuto a été testé sur les dernières versions à date de PS 1.6 et PS 1.7)

La documentation officielle présente de nombreuses informations mais elle n’est pas super détaillée sur les différents type de données possibles nativement, ni sur comment traiter les graphiques.

C’est parti pour voir en détails comment les modules dashboard fonctionnent :
Le nom du module sera hh_dashmodule

Pour commencer notre module sera greffé sur les hooks suivants :

dashboardZoneTwo ( Bloc central du dashboard ) OU dashboardZoneOne ( Colonne de gauche du dashboard )
dashboardData ( Récupérations des données du dashboard)
actionAdminControllerSetMedia ( Pour ajouter le js spécifique du module.)

Le code est volontairement simplifié pour comprendre l’essentiel.

Je passe rapidement sur les hooks
actionAdminControllerSetMedia dont le code sera le suivant :

    /**
     * Ajout du js spécifique du module dans le dashboard
     */
    public function hookActionAdminControllerSetMedia()
    {
        if (get_class($this->context->controller) == 'AdminDashboardController') {
            $this->context->controller->addJs($this->_path.
4 commentaires

Prestashop : Récupérer une configuration directement depuis un template

J’ai récemment rencontré la problématique de devoir utiliser des variables de configuration dans plusieurs templates non liés d’un site prestashop.
Plutôt que de surcharger l’ensemble des controllers impacté , je suis passé par la solution d’ajouter une nouvelle fonctionnalité directement dans Smarty.
Tout ça sans surcharge et via un module qui fonctionne sur PS 1.6 et 1.7

Le code est relativement simple :

class HhConfigTemplate extends Module
{
    public function __construct()
    {
        $this->author    = 'hhennes';
        $this->name      = 'hhconfigtemplate';
        $this->tab       = 'front_office_features';
        $this->version   = '0.1.0';
        $this->bootstrap = true;
        parent::__construct();
 
        $this->displayName = $this->l('HH Config Template');
        $this->description = $this->l('HH Config Template');
    }
 
    public function install()
    {
        if (!parent::install()
            || ! $this->registerHook('displayHeader')
           ) {
            return false;
        }
 
        return true;
    }
 
    public function uninstall()
    {
        return parent::uninstall();
    }
 
    /**
     * Hook Header Ajout d'une fonction dans smarty
     * @param $params
     */
    public function hookDisplayHeader($params)
    {
        //Enregistrement de la fonction "Configuration" dans Smarty qui appelle la fonction "getConfiguration" de cette classe
        smartyRegisterFunction($this->context->smarty, 'function', 'Configuration', array($this, 'getConfiguration'));
    }
 
    /**
     * Récupération d'une configuration
     * @param array $params
     * @return string
     */
    public static function getConfiguration($params)
    {
        if ( isset($params['key'])) {
            return Configuration::get($params['key'],
                isset($params['id_lang']) ?
5 commentaires

Module Catpcha pour prestashop 1.7

Je viens enfin de rendre compatible mon module de captcha eicaptcha avec la version 1.7 de prestashop 🙂
En raison des nombreux changements sur l’infrastructure j’ai quasiment procédé à une réécriture complète du module.

Celui-ci permets d’ajouter un captcha sur le formulaire de contact, et sur le formulaire de création de compte.
( La possibilité de le rajouter sur le formulaire de commentaire produit, et envoyer à un ami est supprimée pour l’instant )

Aperçu :

Formulaire de contact

Formulaire de création de compte

 

Récupération du module :

Via ssh :

git clone https://github.com/nenes25/eicaptcha.git -b 17
cd eicaptcha
composer install

Télécharger une archive complète :

Pour être sûrs de récupérer la dernière version consultez la page https://github.com/nenes25/eicaptcha/releases
Téléchargez la dernière release taguée 2.0.x

Vous pourrez ensuite l’installer via l’administration ou par ftp

Attention ce module nécessite au préalable l’installation du module « contactform » de prestashop, il faut donc penser à l’installer avant 😉
( il est gratuit et disponible par défaut sur toutes les versions )

Changements techniques :

La gestion du formulaire de contact est géré dans prestashop 1.7 via un widget du module contactform.…

41 commentaires

Prestashop : Gérer les dépendances de vos modules

Un petit article rapide qui présente une fonctionnalité qui existe depuis très longtemps  ( version 1.5  de prestashop ), la dépendances de modules.
Pour la mettre en place c’est tout simple.

Il vous suffit de rajouter la propriété « dependencies » dans la fonction construct de votre module.
Avec le nom du module tel que défini dans son fichier.

public function __construct()
    {
        $this->name = 'samplemodule';
        $this->tab = 'others';
        $this->version = '0.1.0';
        $this->author = 'hhennes';
        $this->bootstrap = true;
        parent::__construct();
 
        $this->displayName = $this->l('sample module');
        $this->description = $this->l('sample module');
 
        //Mettre ici le nom des modules dont dépends votre module
        $this->dependencies = array('blockcategories');
    }

Avant d’installer votre module Prestashop vérifiera automatiquement si le ou les modules requis sont bien installés.…

Pas de commentaires

Prestashop : Ajouter des champs dans un formulaire d’administration

Depuis la version 1.6 de Prestashop, il est possible de rajouter rapidement et facilement le formulaire d’édition d’un objet dans l’administration via un module personnalisé.
Et ceci sans surcharge particulière en utilisant tout simplement les hooks existants.

Les objets éditables via cette méthodes sont notamment les suivants :

Cette modification est réalisable via les hooks dynamiques suivants :

Dans la fonction renderForm de la classe AdminController

Hook::exec('action'.$this->controller_name.'FormModifier')

Dans la fonction postProcess de la classe AdminController via aux choix les hooks suivants :

//Avant l'exécution de l'action du controller admin
Hook::exec('actionAdmin'.ucfirst($this->action).'Before', array('controller' => $this));
Hook::exec('action'.get_class($this).
34 commentaires

Fichier .gitignore pour site prestashop de production

Une petite ressource rapide, voici un fichier .gitignore optimisé pour gérer votre site Prestashop ( < 1.7 ) en mode projet

.idea/
/admin-dev/autoupgrade/backup
/admin-dev/backups
/admin-dev/export
/cache/
!/cache/index.php
!/cache/*/index.php
/config/xml/
!/config/xml/index.php
!/config/xml/.htaccess
!/config/xml/themes/index.php
/download
!/download/index.php
!/download/.htaccess
/img/
!/img/index.php
!/img/admin
!/img/jquery-ui
!/img/*/index.php
!/img/*/.htaccess
/log
!/log/index.php
!/log/.htaccess
/modules/*/config*.xml
/themes/*/cache
!/themes/*/cache/index.php
/tools/tcpdf/cache
!/tools/tcpdf/cache/index.php
/upload
!/upload/.htaccess

Il exclus les fichiers des dossiers liés aux contenus du site, mais conserve les fichiers index.php pour que les dossiers soient tout de même bien présent dans le dépot 🙂
Il faut également remplacer « admin-dev » par le chemin de votre admin
N’hésitez pas à soumettre vos optimisations.…

Pas de commentaires

Prestashop 1.7 : Les widgets

La version 1.7 apporte une nouveauté intéressante dans le développement des modules : les widgets

Le principe est relativement simple et pratique, vous pouvez à n’importe quel endroit dans un template afficher le contenu de votre module via le code suivant.
Les exemples ci-dessous sont basé sur le module hh_samplemodule ( sur la branche 17 disponible sur github )

{widget name="hh_samplemodule"}

Vous pouvez également passer n’importe quel paramètre et le récupérer dans votre code

{widget name="hh_samplemodule" hook="top" var1="test" var2="test2" allvars="test"}

Comment l’implémenter dans votre module :

C’est très simple il suffit d’implémenter l’interface WidgetInterface via le code suivant :

use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
class Hh_Samplemodule extends Module implements WidgetInterface

Puis de définir les fonctions renderWiget et getWidgetVariables via le code suivant par exemple

 /**
     * Affichage du widget
     * @param type $hookName
     * @param array $configuration : Ensemble des variables du widget
     * @return array
     */
    public function renderWidget($hookName = null, array $configuration = []) {
        //En fonction des variables du widget 
        //vous pouvez mettre en place des conditions d'affichage
        $this->smarty->assign($this->getWidgetVariables($hookName, $configuration));
        return $this->display(__FILE__, 'views/templates/widget/sample.tpl');
 
    }
 
    /**
     * Récupération des variables du widget
     * @param type $hookName
     * @param array $configuration
     * @return array
     */
    public function getWidgetVariables($hookName = null , array $configuration = [] ){
 
        return  [
            'test' => 'test_var',
            'test2'=> 'test_var2'
            ];
 
    }
1 commentaire

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

4 commentaires

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.
    
6 commentaires

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
 
#Construction de la chaine d'exclusion
ignoreTablesString=""
for table in $ignoreTables
do
ignoreTablesString="$ignoreTablesString --ignore-table $dbname.
Pas de commentaires


Compte Github