module

Prestashop : Utilisation avancée des AdminController

Cet article fait partie d’une série d’articles qui présentent les fonctionnalités avancées disponibles dans un controller d’administration Prestashop. ( adminController )
Les exemples sont réalisés dans le cadre d’un module mais s’appliquent également à tous les anciens controllers de l’administration qui n’utilisent pas encore l’infrastructure symfony
Vous pouvez-consulter les autres articles de la série :

Cet article présente les modifications « générales » qui peuvent être réalisées dans un controller d’administration.

Les points suivants seront traités :

Général :

  • Gestion de la toolbar
    • Changement du titre
    • Ajout d’un bouton d’action
  • Ajouter une action
  • Validation spécifique
  • Gestion d’images
  • Appels Ajax
  • Surcharger le template

Général :

Gestion de la toolbar :

Ajouter un titre sur la page

Ce point est géré par la fonction initToolbarTitle

    /**
     * Affichage d'un titre personnalisé
     */
    public function initToolbarTitle()
    {
        parent::initToolbarTitle();
 
        switch ($this->display) {
            case '':
            case 'list': //Titre pour le listing
                array_pop($this->toolbar_title);
                $this->toolbar_title[] = $this->module->l('Custom Title for listing');
                break;
            case 'add': //Titre pour l'ajout et l'édition d'un objet
            case 'edit':
                array_pop($this->toolbar_title);
                if (($sample = $this->loadObject(true)) && Validate::isLoadedObject($sample)) {
                    $this->toolbar_title[] = sprintf($this->module->l('Editing sample %s'),$sample->name);
                } else {
                    $this->toolbar_title[] = $this->module->l('Creating a new sample');
                }
                break;
        }
    }

Title controller

Ajouter un bouton d’action :
Cet élément est géré par la fonction initPageHeaderToolbar

public function initPageHeaderToolbar()
    {
 
        //Bouton d'ajout ( standard )
        $this->page_header_toolbar_btn['new'] = array(
            'href' => self::$currentIndex .

Prestashop : Utilisation avancée des AdminController Lire la suite »

Prestashop : créer un admin controller pour un module

Nous allons voir les différentes étapes pour réaliser facilement un controller admin basique lié à un module Prestashop.
Puis nous verrons ensuite les caractéristiques de base d’un controller admin, cet article sera complété par d’autres articles pour voir les fonctionnalités avancées 😉
Vous pouvez consulter l’ensemble des informations sur cette page  : https://www.h-hennes.fr/blog/2019/01/30/prestashop-utilisation-avancee-admincontroller/

Note : A partir de la version 1.7.5 de Prestashop il est possible d’utiliser d’utiliser le framework symfony et de suivre le même fonctionnement que les nouveaux controller admin de prestashop, je ferais sans doute un article ultérieurement.
Ce tutoriel reste tout de même valide sur cette version et les suivantes pour l’instant.

Pour cela nous allons créer un module « samplemodule ».
Le code complet est visible sur github : https://github.com/nenes25/prestashop_samplemodule/tree/admin

Les prérequis suivants sont nécessaires pour réaliser un controller admin pour votre module :

  • Création d’une « Tab »
  • Utilisation d’un objet Prestashop héritant de la classe ObjectModel ( et de la base de données qui lui est associée )

Pour l’objet Prestashop nous partirons sur un objet fictif « Sample » avec les propriétés suivantes :

  • name : nom de l’objet
  • code : code de l’objet
  • email : email de l’objet
  • title : titre de l’objet ( différent en fonction de la langue )
  • description : description de l’objet ( différent en fonction de la langue )

Le code suivant sera dans le fichier classes/Sample.php…

Prestashop : créer un admin controller pour un module Lire la suite »

Prestashop 1.7 : Créer un module de paiement

La version 1.7 de prestashop introduit des changements dans la création des modules de paiement.
De mon point de vue cela simplifie vraiment la création de modules de paiement qui deviennent faciles et rapides à coder 🙂

C’est parti pour voir cela en détails et en exemple  via la création d’un module de paiement hhPayment.

use PrestaShop\PrestaShop\Core\Payment\PaymentOption;
 
if (!defined('_PS_VERSION_')) {
    exit;
}
 
class HhPayment extends PaymentModule
{
 
    public function __construct()
    {
        $this->author    = 'hhennes';
        $this->name      = 'hhpayment';
        $this->tab       = 'payment_gateways';
        $this->version   = '0.1.0';
        $this->bootstrap = true;
        parent::__construct();
 
        $this->displayName = $this->l('HH Payment');
        $this->description = $this->l('HH sample Payment for PS 1.7');
    }
 
    public function install()
    {
        if (!parent::install() 
            || !

Prestashop 1.7 : Créer un module de paiement Lire la suite »

Nouvelle série : optimiser le développement de modules Prestashop

Si comme moi vous développez des modules Prestashop vous avez sans doute déjà rencontrés pas mal de difficultés et perdu du temps sur des événements redondants.

Au cours des prochaines semaines, je vais donc partager avec vous les astuces utilisées quotidiennement dans mes développements.

Cette série d’articles devrait donc vous permettre d’optimiser le développement de modules Prestashop.
N’hésitez pas à partager vos astuces pour optimiser encore plus ces articles ! 🙂

Voici les différentes étapes qui seront détaillées :

Étape 1 : mise en place de l’environnement de développement

  • Oubliez wamp, utilisez vagrant
  • Versionnez vos sources ( github / git local / svn )
  • Mettez en place des outils de validation et de corrections des normes

Étape 2 : Industrialiser l’installation de Prestashop et des modules

  • Proposition du structure sur le serveur
  • Installer Prestashop via la ligne de commande
  • Gérer ses modules avec le module eiinstallmodulecli

Étape 3 : Tester fonctionnellement vos modules avec Phpunit et Selenium

  • Configuration de l’environnement pour exécuter les tests
  • Mise en place d’un framework de tests fonctionnels
  • Premiers tests fonctionnels

Étape 4 : Éviter les régressions avec l’intégration continue

  • Mise en place d’une plateforme d’intégration continue avec jenkins

 

Dans le cadre de cette série, les exemples seront liés à la solution Prestashop, mais ces bonnes pratiques peuvent être mises en œuvre sur de nombreux projets 🙂…

Nouvelle série : optimiser le développement de modules Prestashop Lire la suite »

Prestashop 1.5 : Requête ajax dans la configuration d’un module

J’ai perdu dernièrement pas mal de temps en tentant de mettre en place des appels ajax dans la configuration d’un module Prestashop version 1.5.
Les méthodologies qui fonctionnent très bien avec les dernières version de prestashop ne fonctionnaient pas du tout.

Après analyse du code, il s’avère que la gestion des requêtes ajax pour les modules prestashop telle que nous la connaissons n’est pas implémentée pour les versions inférieures à la version 1.6.0.3

Pour corriger cela, il est nécessaire de surcharger la fonction postProcess de la classe AdminController.

Pour faire cela proprement il faut donc créer un override dans le fichier :
override/classes/controller/AdminController.php

avec le contenu suivant :
( j’ai tout simplement repris celui des dernières version )

<?php 
class AdminController extends AdminControllerCore {
 
    /**
     * @todo uses redirectAdmin only if !$this->ajax
     */
    public function postProcess() {
        if ($this->ajax) {
 
            // from ajax-tab.php
            $action = Tools::getValue('action');
            // no need to use displayConf() here
            if (!

Prestashop 1.5 : Requête ajax dans la configuration d’un module Lire la suite »

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 1.4 : Créer un controller Front Office pour un module Lire la suite »