Prestashop 1.7 : Ajouter un champ produit de type file dans l’administration

Suite à mon (ancien ) article (https://www.h-hennes.fr/blog/2017/10/19/prestashop-1-7-ajouter-des-champs-produit/ ) sur l’ajout de champs custom dans le formulaire d’administration d’un produit, j’ai eut pas mal de questions sur comment ajouter un champ de type file.

Il faut reconnaître que la fonctionnalité n’est pas évidente car le formulaire est soumis en ajax et le gère pas l’upload de fichiers.

Le simple fait d’ajouter un champ de type file dans le formulaire n’est donc pas suffisant pour que cela fonctionne.

Cet article présente une approche qui fonctionne, mais je ne peux pas garantir que c’est la meilleure approche.

Pour son fonctionnement je me suis inspiré de la gestion de l’upload qui est faite pour la gestion des images standard du produit via la librairie Js Dropzone

Pour le code j’ai donc repris le code de l’ancien article en y ajoutant la logique d’un champ image.

Voici visuellement comment se présente le champ d’upload

L’ensemble de la logique d’upload et de sauvegarde de la valeur du produit va être gérée directement dans le module

Voici le rendu dans le cas ou une image existe déjà.…

Lire la suite...
Pas de commentaires

Prestashop 1.7 : Ajouter une étape dans le tunnel de commande

Dans sa version 1.7 de Prestashop a complètement refondu le fonctionnement du tunnel de commande.

Le fonctionnement est plus propre que dans la version précédente et avec cette nouvelle architecture il devient relativement simple d’ajouter une nouvelle étape.
Nous allons voir comment réaliser cela via la création d’un module.
L’idée étant d’ajouter une étape « Test de nouvelle étape » comme sur la capture ci-dessous :

Checkout Nouvelle étape
Affichage de la nouvelle étape

Cet étape contiendra uniquement 2 informations que nous souhaitons pouvoir réutiliser dans le panier

Fonctionnement technique

Les différentes étapes du tunnel de commandes sont gérées dans la méthode  bootstrap du controller OrderController , le code est relativement simple à comprendre.

Un instance de la classe CheckoutProcess est créé.
Puis l’ensemble des steps ( étapes ) sont ensuite ajoutée au checkout via la méthode addStep(CheckoutStepInterface $step) qui attends donc une classe implémentant l’interface CheckoutStepInterface

Voici le code de la fonction du controller natif ( version 1.7.6 de Prestashop )

 protected function bootstrap()
    {
        $translator = $this->getTranslator();
 
        $session = $this->getCheckoutSession();
 
        /**
         * Création du process
         */
        $this->checkoutProcess = new CheckoutProcess(
            $this->context,
            $session
        );
 
        /**
         * Ajout des différentes étapes
         */
        $this->checkoutProcess
            ->addStep(new CheckoutPersonalInformationStep(
                $this->context,
                $translator,
                $this->makeLoginForm(),
                $this->makeCustomerForm()
            ))
            ->addStep(new CheckoutAddressesStep(
                $this->context,
                $translator,
                $this->makeAddressForm()
            ));
 
        if (!
Lire la suite...
Pas de commentaires

Prestashop 1.7 : Ajouter des champs dans un formulaire d’administration

Cet article est une mise à jour de l’article suivant https://www.h-hennes.fr/blog/2017/06/21/prestashop-ajouter-des-champs-dans-un-formulaire-dadministration/ qui s’applique aux controllers qui utilisent symfony, c’est le cas à partir 1.7.6 de Prestashop

Si vous avez des doutes si le controller sur lequel vous souhaitez ajouter des champs fonctionne avec ce méthode, n’hésitez pas à consulter l’article suivant pour l’identifier  : https://www.h-hennes.fr/blog/2019/07/25/prestashop-1-7-identifier-si-un-controller-admin-a-ete-migre-vers-symfony/

L’objectif est d’ajouter un nouveau champ dans un formulaire d’administration de manière propre via un module.

Fonctionnement technique

Comme pour les versions précédentes des hooks dynamiques sont présents dans le code prestashop pour vous permettre gérer des informations supplémentaires via vos modules dans les formulaires.

Pour ajouter des champs le hook est exécuté dans la fonction buildForm du fichier src/Core/Form/IdentifiableObject/Builder/FormBuilder.php

Les noms des hooks sont construits sous la forme suivante :

action . Container::camelize($formBuilder->getName()) . FormBuilderModifier

/**
     * @param string $formType
     * @param array $data
     * @param int|null $id
     * @param array $options
     *
     * @return FormInterface
     */
    private function buildForm($formType, $data, $id = null, array $options = [])
    {
        $formBuilder = $this->formFactory->createBuilder($formType, $data, $options);
        $this->hookDispatcher->dispatchWithParameters('action' .
Lire la suite...
22 commentaires

Prestashop 1.7 Identifier si un controller admin a été migré vers symfony

Un petit article rapide qui fait suite aux nombreux retours que j’ai dans les commentaires de certains de mes tutoriels liés à l’administration de Prestashop.

Un des objectifs principal de cette version est de migrer l’ensemble de l’administration vers le framework symfony, au fur et à mesure des nouvelles versions le nombre de page migrées sera donc de plus en plus important.

Et par ricochet mes anciens articles ne seront plus applicables.

Le moyen le plus simple pour vérifier si le controller est migré vers symfony et de consulter son url.

Les anciennes urls ( non symfony ) sont sous la forme

https://prestashop-site.com/admin-dev/index.php?controller=AdminAddresses&

Le terme « controller » est présent dans l’url.

Visuellement les listings se présentent de cette manière :

Controller admin prestashop legacy

Les nouvelles urls (avec symfony ) sont sous la forme

https://prestashop-site.com/admin-dev/index.php/sell/customers/

Le terme « controller » n’est pas présent dans l’url.

Visuellement les listings se présentent de cette manière

Prestashop controller symfony

Ces éléments devraient être suffisant pour vous permettre d’identifier dans quel type de controller admin vous vous trouvez 🙂

 

 …

Lire la suite...
2 commentaires

Mantis : Plugin de gestion de forfait de temps

Voici un nouveau plugin pour Mantis bugtracker qui permets d’afficher et de gérer un forfait de temps.

Pourquoi

Celui-ci est parti des besoins suivants  :

Lors de mes interventions en freelance je vends des forfait d’une certaine durée de temps, et ceux-ci forment une réserve de temps globale disponible pour le client.

Je souhaitais pouvoir connaître ( et afficher au client également ) à tout instant le solde d’heure disponible pour celui-ci.
Dans le cas ou il n’y a plus de temps disponible un email d’information doit pouvoir être envoyé au client.

Mon process d’utilisation de Mantis étant le suivant :

  • Chaque demande est traitée dans un ticket mantis
  • La durée de chaque action est loguée dans le ticket en utilisant la fonction native

Via les fonctions de synthèse natives et la configuration des dates il est possible de s’y retrouver sur des consommations mensuelles par exemple mais ce n’était pas suffisant.

Comment

Nous allons voir à présent comment fonctionne ce plugin :

Une fois celui-ci installé via la page de configuration vous pouvez

  • Activer / Désactiver la fonctionnalité sur le projet
  • Définir l’utilisateur qui recevra les emails d’information
Mantis configurer temps

Une fois le projet activé , le décompte du temps disponible est affiché dans le menu de gauche de mantis.…

Lire la suite...
Pas de commentaires

Prestashop: Générer des modèles via la console

Cet article est la suite de Prestashop : Générer des modules via la console.

Toujours dans la même logique d’optimisation de création des modules via la ligne de commande 🙂

Je rappelle également  que cette fonctionnalité n’est pas disponible via la console native de Prestashop ( disponible à partir de prestashop 1.7 ) mais sur mon outil de console externe : prestashopConsole ( cf. https://github.com/nenes25/prestashop_console )

Cette fois-ci l’idée est de pouvoir générer rapidement et facilement un modèle associé à votre module qui héritera de la classe ObjectModel de Prestashop, le tout sans écrire une seule ligne de code 🙂

Une nouvelle commande fait donc son apparition :

module:generate:model

Les paramètres obligatoires sont :

  • Nom du module
  • Classe du Modèle.

Voici par exemple comment créer un objet Sample pour le module hhdev

./prestashopConsole.phar module:generate:model hhdev Sample

Une saisie interactive va ensuite vous demander les informations nécessaires à la création de votre modèle.

Pour l’exemple nous souhaitons que cet objet ait les propriétés suivantes :

  • table : sample ( Nom de la table sql sans le prefix )
  • primary : id_sample ( Clé primaire de l’objet )
  • Champs :
    • name ( Nom du champ )
      • type : string
      • obligatoire : oui
      • validation : isName
      • longueur : 100 ( Longueur maximum du champ )
      • langue : Non
    • firstname
      • type: string
      • obligatoire : non
      • validation : isName
      • longueur : 120
      • langue: non
    • email
      • type: string
      • obligatoire : oui
      • validation: isEmail
      • longueur : 100
      • langue : non
    • description
      • type : string
      • obligatoire : non
      • validation: isCleanHtml
      • langue : oui

Voici l’aperçu des informations qui sont saisies pour générer ce modèle.…

Lire la suite...
Pas de commentaires

Prestashop : Simplification de la mise en page des emails

Note :
A compter la version 1.7.6 de Prestashop la gestion des emails a été changée et cet article n’est plus d’actualité.

Les emails dans Prestashop ne permettent aucune factorisation, chaque email comprends son code html complet, lorsque vous souhaitez modifier du contenu dans l’entête ou dans le pied de page d’un email il est nécessaire de réaliser la modification sur l’ensemble des emails du site.

Ce n’est pas très pratique et cela peut être source de perte de temps.
Nous allons voir dans cet article qu’il existe des solutions natives et rapides pour optimiser ce point.
Via des créations de modules comme souvent 🙂
Nous allons créer dans cet article un module hhmail dont vous retrouverez le code complet en fin d’article

Principe Technique et prérequis

Lors de l’envoi d’un email de nombreux événements sont exécutés dans la fonction Mail::send,  mais ceux qui nous intéressent sont les suivants :

  • actionEmailAddBeforeContent : exécuté avant la récupération du template de l’email
  • actionEmailAddAfterContent : exécuté après la récupération du template de l’email

Grâces à ces hooks nous pouvons donc injecter du contenu avant et après le contenu de l’email, il est donc aisé de gérer un header et un footer commun pour l’ensemble des emails 🙂

Pour éviter d’ajouter ces contenus sur des emails qui le contiennent déjà, il faudra restreindre la liste des templates sur lesquels ces contenus s’ajouteront, dans cette version je part du principe que seuls les emails surchargés dans le thème seront impactés.

Lire la suite...
2 commentaires

Prestashop : Générer des modules via la console.

Note : Cette fonctionnalité n’est pas disponible via la console native de Prestashop ( disponible à partir de prestashop 1.7 ) mais sur mon outil de console externe : prestashopConsole ( cf. https://github.com/nenes25/prestashop_console )

J’ai dernièrement du créer de nombreux modules sous Prestashop et le fait de les copier / coller des différents modules à chaque fois m’a fait perdre pas mal de temps.
Et je ne connais pas forcément par coeur l’ensemble des syntaxes nécessaires.
Pour optimiser tout cela j’ai donc cherché un moyen de créer facilement et rapidement des modules.
Il existe déjà la possibilité de créer un module via le générateur de module de Prestashop ( disponible ici ) , en revanche cela ne correspondait pas vraiment à mon besoin.
Le plus simple est donc de le gérer via la ligne de commandes, j’ai donc implémenté des nouvelles commandes dans la console de prestashop pour gérer cela.

Voyons ensemble comment créer facilement et rapidement un module via cet outil.…

Lire la suite...
2 commentaires

Commandes console git utiles

Dans le développement git est un outil très puissant et très pratique que j’utilise au quotidien.
Majoritairement via son intégration dans PhpStorm ( très intuitive )

Mais dans certains cas il est  nécessaire d’utiliser la ligne de commande
Voici donc une petite liste de commandes git utiles en fonction des situations

Configuration générale

Définir/modifier l’user et l’email du dépôt courant

git config user.name "Your username"
git config user.email "[email protected]"

 

Création d’un projet

Initialisation d’un projet local (dans le dossier courant )

git init .

Initialisation d’un projet distant ( dans le dossier courant )

git clone https://yourrepositoryurl.com/repo.git .

 

Gestion des fichiers

Ajout de modification

git add path

Annuler les modifications sur un fichier ou un dossier

git checkout -- path

 

Suivre l’état de mon dépôt local

Visualisation du statut global du dépôt

git status

Visualisation des fichiers modifiés

git ls-files -m

Visualisation des fichiers supprimés

git ls-files -d

Valider mes modifications

git commit -m "message de commit"

Voir la liste des modifications apportées

git log

Voir la liste des modifications apportées (version simplifiée)

git log --oneline

 

Mettre à jour mon dépôt local

Lister les dépots distants

git remote -v

Associer la branche locale à une branche distante

git branch --set-upstream-to=orignin/branchName

Récupération des informations distantes

git pull origin branchName

Réinitialisation de la branche locale comme la branche distante ( attention efface tout l’historique local )

git reset --hard origin/branchName

 

Gestion des branches

Création d’une branche

git checkout -b branchName

Changement de branche

git checkout branchName

Fusioner une branche dans la branche courante

git merge branchName

Lister les branches du dépot

git branch -a

Supprimer une branche du dépôt local ( si déjà mergée ou poussée )

git branch -d branchName

Supprimer une branche du dépôt local (peu importe son statut )

git branch -D branchName

Supprimer une branche du dépôt distant

git push origin --delete branchName
Lire la suite...
Pas de commentaires

Prestashop : Utilisation avancée des AdminController

Cet article est la suite est de celui qui présente le fonctionnement de base et qui est consultable ici : https://www.h-hennes.fr/blog/2018/11/15/prestashop-admincontroller-pour-un-module/
Il présente les fonctionnalités avancées disponibles dans un adminController réalisé dans le cadre d’un module et il aura vocation a être modifié ou complété au fur et à mesure.
Voici le détails des points qui seront évoqué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

Listing :

  • Champs active / non active
  • Ajouter un callback sur un champ
  • Ajouter des actions de masse personnalisée
  • Récupérer les données de plusieurs tables

Formulaire :

  • Lier des champs en ajax
  • Afficher des contenus totalement personnalisé

Options :

  • Ensemble des cas d’affichage d’options
  • Traitement spécifique d’une option

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 .
Lire la suite...
5 commentaires

Archives

Compte Github