Création d'une extension Twig de filtre personnalisé

14 12 2016

2 commentaires

Création d'une extension Twig de filtre personnalisé

On a souvent besoin des filtres Twig pour mettre en forme les objets dans les templates. Voici la liste officielle des filtres Twig existants.

Cependant quand les filtres Twig existants ne suffisent pas, on peut avoir recourt à la création d'une extension de filtre Twig personnalisé.

Par exemple pour les sites e-commerce, on a besoin d'un filtre qui calcule la TVA d'un produit affichant un prix HT afin de calculer le montant TTC (rappel : prix HT + TVA = prix TTC). Car en effet sur un site e-commerce tous les prix des produits rentrés en base sont obligatoirement HT.

 

Création d'un filtre personnalisé de calcul de la TVA

On doit tout d'abord créer un dossier Twig/Extension dans le dossier src.

Ce dossier va contenir la classe du filtre que nous allons appeler TvaExtension.php

Nous allons dès maintenant déclarer cette extension en tant que service dans le fichier services.yml

services:
    tva:
        class: Boutique\BoutiqueBundle\Twig\Extension

\TvaExtension
        tags:
            - { name: twig.extension }

On déclare donc la classe Boutique\BoutiqueBundle\Twig\Extension

\TvaExtension et on précise dans les tags que c'est une extension Twig en écrivant - { name: twig.extension } (sinon le filtre Twig ne marchera pas)

Maintenant occupons-nous du fichier TvaExtension.php.

<?php
namespace Boutique\BoutiqueBundle\Twig

\Extension;

class TvaExtension extends \Twig_Extension
{
    public function getFilters() //méthode obligatoire pour nommer le filtre dans twig
    {
        return array(new \Twig_SimpleFilter('tva', array($this,'calculTva')));//on nomme simplement le filtre que l on va utilisé dans twig. On le nome tva et on lui associe la méthode calculTva
    }
    
    function calculTva($prixHT,$tva) //définition de la méthode principale du filtre tva
    {
        $prixTTC = round($prixHT/$tva,2);
        
        return $prixTTC;
    }
    
    public function getName() //méthode obligatoire pour nommer le filtre dans twig
    {
        return 'tva_extension';
    }
}

 

Et maintenant on peut appliquer dans le template le filtre à la variable {{produit.prix}}

{{produit.prix|tva(produit.tva.multiplicate)| number_format(2, '.', ',')}} €

Attention il y a un ordre pour les paramètres de la méthode calculTva($prixHT,$tva). on définit les parametre de la vue : le premier parametre est produit.prix et le deuxieme parametre est produit.tva.muliplicate

produit.tva.muliplicate étant le multiplicateur de la TVA contenu dans une entité Tva lié à Produits en n..1 et ayant comme attribut multiplicate avec par exemple une valeur égale à 0.833 (pour la TVA à 20%).

Pour obtenir le coefficient multiplicateur c'est de la gestion : on fait coeff = prix HT/prix TTC=0.833 (pour la TVA à 20%)


 catégorie: Twig


Commentaires

Freedman's Office Furniture, Cubicles, Desks, Chairs 515 E Las Olas Blvd Suite 120, Fort Lauderdale posté le 29/02/2024 à 03:13

Freedman's Office Furniture, Cubicles, Desks, Chairs
515 E Las Olas Blvd Suite 120,
Fort Lauderdale, FL 33301

(954) 466-1629

Office desks, Office chairs, Office tables


Freedman's Office Furniture, Cubicles, Desks, Chairs 515 E Las Olas Blvd Suite 120, Fort Lauderdale posté le 29/02/2024 à 03:13

Freedman's Office Furniture, Cubicles, Desks, Chairs
515 E Las Olas Blvd Suite 120,
Fort Lauderdale, FL 33301

(954) 466-1629

Office desks, Office chairs, Office tables



Laisser un commentaire