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
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)
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/
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
Dans le cas où on souhaite ajouter des CSS et JS à notre thème :
// 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/
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/
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
👉 https://www.prestasafe.com/modifier-theme-de-prestashop-1-7-nodejs
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 :
/**
* @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
La doc relative aux PDF dans Prestashop 👉 https://devdocs.prestashop.com/1.7/modules/concepts/pdf/
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 compriseprice_tax_exc
: prix HT, réduction compriseprice_without_reduction
: prix TTC, sans réductionprice_without_reduction_without_tax
: prix HT, sans réductionreduction
: valeur de la réduction TTCreduction_without_tax
: valeur de la réduction HTrate
: taux de TVArounded_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 compriseregular_price
: prix TTC, sans réductiondiscount_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)
- 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
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 : PrestaShop/PrestaShop#15075 (comment)
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)Product::getPriceStatic($id_product, false, null, 6, null, false, true)
: prix HT, réduction compriseProduct::getPriceStatic($id_product, true, null, 6, null, false, false)
: prix TTC, sans réductionProduct::getPriceStatic($id_product, false, null, 6, null, false, false)
: prix HT, sans réductionProduct::getPriceStatic($id_product, true, null, 6, null, true, false)
: valeur de la réduction TTCProduct::getPriceStatic($id_product, false, null, 6, null, true, false)
: valeur de la réduction HT
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
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/
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'}