Skip to content

Instantly share code, notes, and snippets.

@rseon
Last active December 21, 2021 16:28
Show Gist options
  • Save rseon/7ab819ada6a3c4b57be0ab0d21338e5b to your computer and use it in GitHub Desktop.
Save rseon/7ab819ada6a3c4b57be0ab0d21338e5b to your computer and use it in GitHub Desktop.

Revisions

  1. rseon revised this gist Dec 21, 2021. 1 changed file with 16 additions and 16 deletions.
    32 changes: 16 additions & 16 deletions Prestashop_Tips.md
    Original file line number Diff line number Diff line change
    @@ -1,20 +1,20 @@
    # AdminPatterns
    ## AdminPatterns
    Pour vous aider dans la conception de vos formulaires ou affichage de configuration de module, il existe un controller caché `AdminPatterns` qui vous donne tous les champs possibles.

    Il est accessible dans l'administration à l'adresse https://website.com/admin_xxxxxx/index.php?controller=AdminPatterns et le controller se trouve dans `/controllers/admin/AdminPatternsController.php`


    # Astuce PDF
    ## Astuce PDF
    Gagner du temps lors la personnalisation des fichiers pdf ( factures / livraisons … ) 👉 https://www.h-hennes.fr/blog/2020/07/13/prestashop-gagnez-du-temps-lors-la-personnalisation-des-fichiers-pdf-factures-livraisons/
    (ce site est une mine d'or au passage)



    # Bootstrap
    ## Bootstrap
    Bon à savoir : la version de Boostrap utilisée dans Prestashop est la v4-alpha.5, dont la doc est ici 👉 https://v4-alpha.getbootstrap.com/


    # Changer les templates des mails
    ## Changer les templates des mails
    Après moultes recherches et tests, j'ai fini par trouver comment modifier **facilement** les templates des mails (sans avoir envie de se foutre en l'air donc).

    Il suffit de modifier les fichiers présents dans `/mails/themes/modern`.
    @@ -29,7 +29,7 @@ Cela génèrera les templates dans le dossier `/themes/[your-theme]/mails`.
    Vous pouvez ensuite les prévisualiser dans la page de l'admin encart **Thèmes d'e-mail**


    # CSS et JS globaux
    ## CSS et JS globaux
    Dans le cas où on souhaite ajouter des CSS et JS à notre thème :
    ```php
    // Fichier /override/classes/controller/FrontController.php
    @@ -51,7 +51,7 @@ class FrontController extends FrontControllerCore
    Resource : https://devdocs.prestashop.com/1.7/themes/getting-started/asset-management/


    # Détecter le device
    ## Détecter le device
    Dans un template Smarty il peut être utile de savoir sur quel type de device on se trouve :

    - Mobile : `{if Context::getContext()->isMobile() && !Context::getContext()->isTablet()}{/if}` ou `{if Context::getContext()->getDevice() == 4}{/if}`
    @@ -61,17 +61,17 @@ Dans un template Smarty il peut être utile de savoir sur quel type de device on
    Source : https://www.themebooster.com/prestashop-tutorials/prestashop-detect-mobile-devices/


    # Material Icons
    ## Material Icons
    Bon à savoir : le front de Prestashop utilise les icones Material, que vous pouvez utiliser ainsi : `<span class="material-icons">done</span>`

    La doc 👉 https://material.io/resources/icons/?style=baseline


    # Modifier le thème avec NodeJS
    ## Modifier le thème avec NodeJS
    👉 https://www.prestasafe.com/modifier-theme-de-prestashop-1-7-nodejs


    # Partager des données sur tout le site depuis un module
    ## Partager des données sur tout le site depuis un module
    Le hook `actionFrontControllerSetVariables` permet d'affecter des variables aux templates ainsi qu'en javascript via l'objet global `prestashop` à l'aide du namespace `modules.mon_module`. Donc par exemple :
    ```php
    /**
    @@ -89,11 +89,11 @@ public function hookActionFrontControllerSetVariables($params)
    - Depuis du JS : `prestashop.modules.mon_module.hello_text`


    # PDF
    ## PDF
    La doc relative aux PDF dans Prestashop 👉 https://devdocs.prestashop.com/1.7/modules/concepts/pdf/


    # Prix produits
    ## Prix produits
    Plusieurs prix sont disponibles pour les calculs et de l'affichage dans le TPL de la fiche produit.

    *Valeurs brutes (nombres)*
    @@ -115,15 +115,15 @@ Plusieurs prix sont disponibles pour les calculs et de l'affichage dans le TPL d
    (liste non exhaustive et dépendant sûrement de la version de PS, vous pouvez faire `{$product|dump}` pour avoir la liste des clés du produit)


    # Traductions
    ## Traductions
    - Quand on est dans un template du _thème_ : `{l s='Ma chaîne de caractère en français' d='Shop.Nomdutheme'}`
    - Quand on est dans un _module_ : `{l s='Ma chaîne de caractère en français' mod='mon_module'}`

    Puis dans l'admin, onglet **International > Traductions**, on choisit :
    - Traductions de thème > nomdutheme > English
    - Traductions des modules installés > Mon module > English

    # Trick traductions introuvables
    ## Trick traductions introuvables
    Il faut savoir que seules les traductions des fichiers TPL remontent dans l'outil de traduction de l'admin.

    Si on veut en créer une en PHP (exemple : `$this->translator->trans('My string', [], 'Shop.Mytheme.Labels')`) il faut l'ajouter dans un TPL quelconque (pourvu qu'il soit affiché à l'écran) : `{l s='My string' d='Shop.Mytheme.Labels}`.
    @@ -135,7 +135,7 @@ Tadaaa !
    Source : https://github.com/PrestaShop/PrestaShop/issues/15075#issuecomment-558578624


    # Understanding `getPriceStatic`
    ## Understanding `getPriceStatic`
    La méthode `Product::getPriceStatic()` est très utile pour récupérer le prix d'un produit, on fonction des paramètres qu'on lui passe :

    - `Product::getPriceStatic($id_product, true, null, 6, null, false, true)` : prix TTC, réduction comprise (par défaut)
    @@ -148,13 +148,13 @@ La méthode `Product::getPriceStatic()` est très utile pour récupérer le prix
    _Note_ : si jamais il y a une erreur à l'appel de cette commande, il faut peut-être initialiser l'employé (me demandez pas pourquoi) en faisant `Context::getContext()->employee = 1;` avant l'appel à la méthode


    # Variables Smarty
    ## Variables Smarty
    Il est possible d'utiliser de nombreuses variables globales dans les templates Smarty, en voici une liste :

    https://www.team-ever.com/prestashop-1-7-liste-des-variables-smarty/


    # Widgets
    ## Widgets
    Prestashop 1.7 permet d'utiliser les _widgets_, utiles afin de placer les modules où on veut dans les templates.

    Doc : https://devdocs.prestashop.com/1.7/modules/concepts/widgets/
  2. rseon revised this gist Dec 7, 2021. 1 changed file with 16 additions and 2 deletions.
    18 changes: 16 additions & 2 deletions Prestashop_Tips.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,6 @@
    # AdminPatterns
    Pour vous aider dans la conception de vos formulaires ou affichage de configuration de module, il existe un controller caché `AdminPatterns` qui vous donne tous les champs possibles.

    Il est accessible dans l'administration à l'adresse https://website.com/admin_xxxxxx/index.php?controller=AdminPatterns et le controller se trouve dans `/controllers/admin/AdminPatternsController.php`


    @@ -15,13 +16,16 @@ Bon à savoir : la version de Boostrap utilisée dans Prestashop est la v4-alpha

    # Changer les templates des mails
    Après moultes recherches et tests, j'ai fini par trouver comment modifier **facilement** les templates des mails (sans avoir envie de se foutre en l'air donc).

    Il suffit de modifier les fichiers présents dans `/mails/themes/modern`.

    Une fois les modifications effectuées, rendez-vous dans l'admin, onglet **Apparance > Thème d'email**, puis dans l'encart **Générer des emails** :
    - Choisissez votre thème d'e-mail : `modern`
    - Choisissez votre langue : `Français (French)`
    - Sélectionnez le thème que vous voulez écraser : `classic` (ou le nom de notre thème)
    - Ecraser les templates : `Oui`
    Cela génèrera les templates dans le dossier `/themes/[your-theme]/mails`.

    Vous pouvez ensuite les prévisualiser dans la page de l'admin encart **Thèmes d'e-mail**


    @@ -59,6 +63,7 @@ Source : https://www.themebooster.com/prestashop-tutorials/prestashop-detect-mob

    # Material Icons
    Bon à savoir : le front de Prestashop utilise les icones Material, que vous pouvez utiliser ainsi : `<span class="material-icons">done</span>`

    La doc 👉 https://material.io/resources/icons/?style=baseline


    @@ -80,8 +85,8 @@ public function hookActionFrontControllerSetVariables($params)
    ];
    }
    ```
    Depuis un template : `{$modules.mon_module.hello_text}`
    Depuis du JS : `prestashop.modules.mon_module.hello_text`
    - Depuis un template : `{$modules.mon_module.hello_text}`
    - Depuis du JS : `prestashop.modules.mon_module.hello_text`


    # PDF
    @@ -120,9 +125,13 @@ Puis dans l'admin, onglet **International > Traductions**, on choisit :

    # Trick traductions introuvables
    Il faut savoir que seules les traductions des fichiers TPL remontent dans l'outil de traduction de l'admin.

    Si on veut en créer une en PHP (exemple : `$this->translator->trans('My string', [], 'Shop.Mytheme.Labels')`) il faut l'ajouter dans un TPL quelconque (pourvu qu'il soit affiché à l'écran) : `{l s='My string' d='Shop.Mytheme.Labels}`.

    On recharge la page, et si tout va bien, notre string apparait dans le moteur de traduction. Il ne reste plus qu'à traduire et retirer la string du TPL.

    Tadaaa !

    Source : https://github.com/PrestaShop/PrestaShop/issues/15075#issuecomment-558578624


    @@ -141,14 +150,19 @@ _Note_ : si jamais il y a une erreur à l'appel de cette commande, il faut peut-

    # Variables Smarty
    Il est possible d'utiliser de nombreuses variables globales dans les templates Smarty, en voici une liste :

    https://www.team-ever.com/prestashop-1-7-liste-des-variables-smarty/


    # Widgets
    Prestashop 1.7 permet d'utiliser les _widgets_, utiles afin de placer les modules où on veut dans les templates.

    Doc : https://devdocs.prestashop.com/1.7/modules/concepts/widgets/

    Pour utiliser le widget d'un module, il faut au préalable vérifier que ce module le permet, et on le sait si la classe du module (fichier qui porte le même nom que son répertoire) implémente la classe `WidgetInterface`. C'est le cas par exemple du module Panier `ps_shoppingcart`. On peut l'afficher où on veut dans les TPL grâce au marqueur `{widget name='ps_shoppingcart'}`.

    L'inconvénient est qu'on outrepasse la partie Position de l'admin, puisque la position du module est fixée dans le template.

    Dans le cas où le module peut être accroché à plusieurs hooks, on peut le forcer ainsi : `{widget name='ps_shoppingcart' mod='displayTop'}`

    Dans le cas où le module n'a pas de widget, pas de panique ! On peut utiliser l'ancien marqueur de hook de cette façon : `{hook h='displayTop' mod='module_sans_widget'}`
  3. rseon revised this gist Dec 7, 2021. 1 changed file with 80 additions and 8 deletions.
    88 changes: 80 additions & 8 deletions Prestashop_Tips.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,19 @@
    # Changer les templates des mails
    # AdminPatterns
    Pour vous aider dans la conception de vos formulaires ou affichage de configuration de module, il existe un controller caché `AdminPatterns` qui vous donne tous les champs possibles.
    Il est accessible dans l'administration à l'adresse https://website.com/admin_xxxxxx/index.php?controller=AdminPatterns et le controller se trouve dans `/controllers/admin/AdminPatternsController.php`


    # Astuce PDF
    Gagner du temps lors la personnalisation des fichiers pdf ( factures / livraisons … ) 👉 https://www.h-hennes.fr/blog/2020/07/13/prestashop-gagnez-du-temps-lors-la-personnalisation-des-fichiers-pdf-factures-livraisons/
    (ce site est une mine d'or au passage)



    # Bootstrap
    Bon à savoir : la version de Boostrap utilisée dans Prestashop est la v4-alpha.5, dont la doc est ici 👉 https://v4-alpha.getbootstrap.com/


    # Changer les templates des mails
    Après moultes recherches et tests, j'ai fini par trouver comment modifier **facilement** les templates des mails (sans avoir envie de se foutre en l'air donc).
    Il suffit de modifier les fichiers présents dans `/mails/themes/modern`.
    Une fois les modifications effectuées, rendez-vous dans l'admin, onglet **Apparance > Thème d'email**, puis dans l'encart **Générer des emails** :
    @@ -12,7 +26,6 @@ Vous pouvez ensuite les prévisualiser dans la page de l'admin encart **Thèmes


    # CSS et JS globaux

    Dans le cas où on souhaite ajouter des CSS et JS à notre thème :
    ```php
    // Fichier /override/classes/controller/FrontController.php
    @@ -35,7 +48,6 @@ Resource : https://devdocs.prestashop.com/1.7/themes/getting-started/asset-manag


    # Détecter le device

    Dans un template Smarty il peut être utile de savoir sur quel type de device on se trouve :

    - Mobile : `{if Context::getContext()->isMobile() && !Context::getContext()->isTablet()}{/if}` ou `{if Context::getContext()->getDevice() == 4}{/if}`
    @@ -45,8 +57,60 @@ Dans un template Smarty il peut être utile de savoir sur quel type de device on
    Source : https://www.themebooster.com/prestashop-tutorials/prestashop-detect-mobile-devices/


    # Traductions
    # Material Icons
    Bon à savoir : le front de Prestashop utilise les icones Material, que vous pouvez utiliser ainsi : `<span class="material-icons">done</span>`
    La doc 👉 https://material.io/resources/icons/?style=baseline


    # Modifier le thème avec NodeJS
    👉 https://www.prestasafe.com/modifier-theme-de-prestashop-1-7-nodejs


    # Partager des données sur tout le site depuis un module
    Le hook `actionFrontControllerSetVariables` permet d'affecter des variables aux templates ainsi qu'en javascript via l'objet global `prestashop` à l'aide du namespace `modules.mon_module`. Donc par exemple :
    ```php
    /**
    * @params array('templateVars' => &(array))
    * @return array
    */
    public function hookActionFrontControllerSetVariables($params)
    {
    return [
    'hello_text' => 'Hello world',
    ];
    }
    ```
    Depuis un template : `{$modules.mon_module.hello_text}`
    Depuis du JS : `prestashop.modules.mon_module.hello_text`


    # PDF
    La doc relative aux PDF dans Prestashop 👉 https://devdocs.prestashop.com/1.7/modules/concepts/pdf/


    # Prix produits
    Plusieurs prix sont disponibles pour les calculs et de l'affichage dans le TPL de la fiche produit.

    *Valeurs brutes (nombres)*
    - `price_amount` : prix TTC, réduction comprise
    - `price_tax_exc` : prix HT, réduction comprise
    - `price_without_reduction` : prix TTC, sans réduction
    - `price_without_reduction_without_tax` : prix HT, sans réduction
    - `reduction` : valeur de la réduction TTC
    - `reduction_without_tax` : valeur de la réduction HT
    - `rate` : taux de TVA
    - `rounded_display_price` : à l'air d'être identique à `price_amount` (avec arrondis ?)
    - `regular_price_amount` : prix TTC sans réduction

    *Valeurs formatées (avec le €)*
    - `price` : prix TTC, réduction comprise
    - `regular_price` : prix TTC, sans réduction
    - `discount_to_display` : valeur de la réduction TTC

    (liste non exhaustive et dépendant sûrement de la version de PS, vous pouvez faire `{$product|dump}` pour avoir la liste des clés du produit)


    # Traductions
    - Quand on est dans un template du _thème_ : `{l s='Ma chaîne de caractère en français' d='Shop.Nomdutheme'}`
    - Quand on est dans un _module_ : `{l s='Ma chaîne de caractère en français' mod='mon_module'}`

    @@ -55,24 +119,32 @@ Puis dans l'admin, onglet **International > Traductions**, on choisit :
    - Traductions des modules installés > Mon module > English

    # Trick traductions introuvables

    Il faut savoir que seules les traductions des fichiers TPL remontent dans l'outil de traduction de l'admin.
    Si on veut en créer une en PHP (exemple : `$this->translator->trans('My string', [], 'Shop.Mytheme.Labels')`) il faut l'ajouter dans un TPL quelconque (pourvu qu'il soit affiché à l'écran) : `{l s='My string' d='Shop.Mytheme.Labels}`.
    On recharge la page, et si tout va bien, notre string apparait dans le moteur de traduction. Il ne reste plus qu'à traduire et retirer la string du TPL.
    Tadaaa !
    Source : https://github.com/PrestaShop/PrestaShop/issues/15075#issuecomment-558578624


    # Understanding `getPriceStatic`
    La méthode `Product::getPriceStatic()` est très utile pour récupérer le prix d'un produit, on fonction des paramètres qu'on lui passe :

    # Variables Smarty
    - `Product::getPriceStatic($id_product, true, null, 6, null, false, true)` : prix TTC, réduction comprise (par défaut)
    - `Product::getPriceStatic($id_product, false, null, 6, null, false, true)` : prix HT, réduction comprise
    - `Product::getPriceStatic($id_product, true, null, 6, null, false, false)` : prix TTC, sans réduction
    - `Product::getPriceStatic($id_product, false, null, 6, null, false, false)` : prix HT, sans réduction
    - `Product::getPriceStatic($id_product, true, null, 6, null, true, false)` : valeur de la réduction TTC
    - `Product::getPriceStatic($id_product, false, null, 6, null, true, false)` : valeur de la réduction HT

    Il est possible d'utiliser de nombreuses variables globales dans les templates Smarty, en voici une liste :
    _Note_ : si jamais il y a une erreur à l'appel de cette commande, il faut peut-être initialiser l'employé (me demandez pas pourquoi) en faisant `Context::getContext()->employee = 1;` avant l'appel à la méthode


    # Variables Smarty
    Il est possible d'utiliser de nombreuses variables globales dans les templates Smarty, en voici une liste :
    https://www.team-ever.com/prestashop-1-7-liste-des-variables-smarty/


    # Widgets

    Prestashop 1.7 permet d'utiliser les _widgets_, utiles afin de placer les modules où on veut dans les templates.
    Doc : https://devdocs.prestashop.com/1.7/modules/concepts/widgets/
    Pour utiliser le widget d'un module, il faut au préalable vérifier que ce module le permet, et on le sait si la classe du module (fichier qui porte le même nom que son répertoire) implémente la classe `WidgetInterface`. C'est le cas par exemple du module Panier `ps_shoppingcart`. On peut l'afficher où on veut dans les TPL grâce au marqueur `{widget name='ps_shoppingcart'}`.
  4. rseon created this gist Dec 7, 2021.
    82 changes: 82 additions & 0 deletions Prestashop_Tips.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,82 @@
    # Changer les templates des mails

    Après moultes recherches et tests, j'ai fini par trouver comment modifier **facilement** les templates des mails (sans avoir envie de se foutre en l'air donc).
    Il suffit de modifier les fichiers présents dans `/mails/themes/modern`.
    Une fois les modifications effectuées, rendez-vous dans l'admin, onglet **Apparance > Thème d'email**, puis dans l'encart **Générer des emails** :
    - Choisissez votre thème d'e-mail : `modern`
    - Choisissez votre langue : `Français (French)`
    - Sélectionnez le thème que vous voulez écraser : `classic` (ou le nom de notre thème)
    - Ecraser les templates : `Oui`
    Cela génèrera les templates dans le dossier `/themes/[your-theme]/mails`.
    Vous pouvez ensuite les prévisualiser dans la page de l'admin encart **Thèmes d'e-mail**


    # CSS et JS globaux

    Dans le cas où on souhaite ajouter des CSS et JS à notre thème :
    ```php
    // Fichier /override/classes/controller/FrontController.php
    <?php

    class FrontController extends FrontControllerCore
    {
    public function setMedia()
    {
    parent::setMedia();

    $this->registerStylesheet('slick', '/assets/lib/slick/slick.min.css', ['media' => 'all', 'priority' => 100]);
    $this->registerJavascript('slick', '/assets/lib/slick/slick.min.js', ['position' => 'bottom', 'priority' => 100]);

    return true;
    }
    }
    ```
    Resource : https://devdocs.prestashop.com/1.7/themes/getting-started/asset-management/


    # Détecter le device

    Dans un template Smarty il peut être utile de savoir sur quel type de device on se trouve :

    - Mobile : `{if Context::getContext()->isMobile() && !Context::getContext()->isTablet()}{/if}` ou `{if Context::getContext()->getDevice() == 4}{/if}`
    - Tablette : `{if Context::getContext()->isTablet()}{/if}` ou `{if Context::getContext()->getDevice() == 2}{/if}`
    - Ordinateur : `{if !Context::getContext()->isMobile() && !Context::getContext()->isTablet()}{/if}` ou `{if Context::getContext()->getDevice() == 1}{/if}`

    Source : https://www.themebooster.com/prestashop-tutorials/prestashop-detect-mobile-devices/


    # Traductions

    - Quand on est dans un template du _thème_ : `{l s='Ma chaîne de caractère en français' d='Shop.Nomdutheme'}`
    - Quand on est dans un _module_ : `{l s='Ma chaîne de caractère en français' mod='mon_module'}`

    Puis dans l'admin, onglet **International > Traductions**, on choisit :
    - Traductions de thème > nomdutheme > English
    - Traductions des modules installés > Mon module > English

    # Trick traductions introuvables

    Il faut savoir que seules les traductions des fichiers TPL remontent dans l'outil de traduction de l'admin.
    Si on veut en créer une en PHP (exemple : `$this->translator->trans('My string', [], 'Shop.Mytheme.Labels')`) il faut l'ajouter dans un TPL quelconque (pourvu qu'il soit affiché à l'écran) : `{l s='My string' d='Shop.Mytheme.Labels}`.
    On recharge la page, et si tout va bien, notre string apparait dans le moteur de traduction. Il ne reste plus qu'à traduire et retirer la string du TPL.
    Tadaaa !
    Source : https://github.com/PrestaShop/PrestaShop/issues/15075#issuecomment-558578624



    # Variables Smarty

    Il est possible d'utiliser de nombreuses variables globales dans les templates Smarty, en voici une liste :

    https://www.team-ever.com/prestashop-1-7-liste-des-variables-smarty/


    # Widgets

    Prestashop 1.7 permet d'utiliser les _widgets_, utiles afin de placer les modules où on veut dans les templates.
    Doc : https://devdocs.prestashop.com/1.7/modules/concepts/widgets/
    Pour utiliser le widget d'un module, il faut au préalable vérifier que ce module le permet, et on le sait si la classe du module (fichier qui porte le même nom que son répertoire) implémente la classe `WidgetInterface`. C'est le cas par exemple du module Panier `ps_shoppingcart`. On peut l'afficher où on veut dans les TPL grâce au marqueur `{widget name='ps_shoppingcart'}`.
    L'inconvénient est qu'on outrepasse la partie Position de l'admin, puisque la position du module est fixée dans le template.

    Dans le cas où le module peut être accroché à plusieurs hooks, on peut le forcer ainsi : `{widget name='ps_shoppingcart' mod='displayTop'}`
    Dans le cas où le module n'a pas de widget, pas de panique ! On peut utiliser l'ancien marqueur de hook de cette façon : `{hook h='displayTop' mod='module_sans_widget'}`