Principe de base
Lorsque vous créez un nouvel objet ayant un prix, au lieu d’utiliser directement la valeur d’un champ qui contiendrait ce prix, ce plugin propose une API unifiée permettant de sortir le prix HT et le prix TTC toujours de la même manière, que ce soit une simple valeur de champ ou un calcul compliqué en arrière plan.
Implémentation
Pour que cette API fonctionne, vous devez l’implémenter pour le nouvel objet. Pour cela vous devez créer un fichier prix/<objet>.php
avec possiblement deux fonctions.
Par exemple pour une patate :
prix_patate_ht_dist($id_patate, $ligne_sql)
: cette fonction doit renvoyer la valeur du prix hors taxe pour cet identifiant. Afin de ne pas avoir trop de requête SQL, il y a déjà un argument contenant la ligne SQL de ce contenu, avec tous ses champs. Comme très souvent il s’agit juste de renvoyer le contenu d’un champ prix_ht
ou prix
, le plugin sait déjà le faire tout seul, et dans ce cas vous n’avez pas à implémenter cette fonction. Elle n’est donc utile que si la valeur n’est pas dans un champ commun, ou bien si vous avez besoin de faire des calculs pour trouver le prix HT, par exemple en multipliant avec une quantité (c’est ce que fait le plugin Commande par exemple).
prix_patate_dist($id_patate, $prix_ht)
: cette fonction doit renvoyer le prix toute taxes comprises pour cet identifiant. Elle reçoit aussi le prix HT déjà calculé en amont. Si votre plugin est lié à un système permettant de trouver une ou plusieurs taxes pour votre objet, alors vous devez faire les calculs nécessaires et retourner le prix TTC. Si ce n’est pas le cas, le prix renvoyé au final sera le même que le prix HT.
Utilisation en PHP
Au niveau de l’utilisation, le cœur de l’API est constitué de deux fonctions génériques placées dans inc/prix.php
.
inc_prix_ht_dist($type_objet, $id_objet, $arrondi)
// Charger la fonction
$fonction_prix_ht = charger_fonction('ht', 'inc/prix');
// Arrondi après la virgule
$arrondi = 2;
// On trouve le prix HT
$prix_ht = $fonction_prix_ht('patate', $id_patate, $arrondi);
inc_prix_dist($type_objet, $id_objet, $arrondi)
// Charger la fonction
$fonction_prix = charger_fonction('prix', 'inc/');
// Arrondi après la virgule
$arrondi = 2;
// On trouve le prix TTC
$prix_ttc = $fonction_prix('patate', $id_patate, $arrondi);
Utilisation dans les squelettes
À utiliser dans le boucle d’un objet :
- #PRIX_HT
: renvoie le prix HT d’un objet
- #PRIX
: renvoie le prix TTC d’un objet
Les balises de prix sont directement formatées, un filtre leur est appliqué automatiquement, sauf si vous utilisez l’étoile *. Si vous devez formater une autre valeur, ou après un calcul dans un squelette, il s’agit du filtre prix_formater
:
Les taxes seules :
[(#PRIX*|moins{#PRIX_HT*}|prix_formater)]
Si vous avez besoin de trouver le prix d’un objet quelconque dans un squelette, sans le connaitre à l’avance, donc sans boucle, deux filtres permettent cela, qui appellent directement l’API centrale :
- prix_ht_objet($id_objet, $type_objet)
- prix_objet($id_objet, $type_objet)
Paramétrage
Après l’ajout de la librairie INTL la configuration se fait désormais dans l’interface d’administration du site.
Deux constantes permettent de gérer la devise utilisée.
On peut les définir dans le fichier mes_options.php :
- PRIX_DEVISE
pour formater les prix selon une langue (séparateur de milliers, de décimal, etc...). Cette valeur est utilisée par la fonction setlocale
de PHP pour le paramètre LC_MONETARY
.
- DEVISE_DEFAUT
pour indiquer quel texte doit être affiché après les prix pour indiquer la devise utilisée.
Auparavant, pour les dollars canadiens, on définissait les valeurs ainsi :
define('PRIX_DEVISE','fr_CA.utf8'); // locale du français Canadien
define('DEVISE_DEFAUT',' $ CAN'); // espace insécable + symbole dollar + CAN
Pipelines
Le plugin défini deux pipelines : « prix » et « prix_ht ».
Le plugin n’associe aucun traitement par défaut à ces pipelines, mais il est possible de les définir pour votre site ou plugin, de manière à adapter les prix selon les intentions et besoins. C’est ce que fait notamment le plugin ’montants’, par exemple.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |