Limiter la longueur d’une chaîne avec TWIG et le filtre truncate

Avec TWIG, il est possible d’appliquer des filtres à nos variables, et des fonctionnalités semblables à la function truncate() utilisée avec PHP. Pour pouvoir utiliser ces filtres, il est nécessaire d’activer certaines extensions TWIG.

L’extension dont nous avons besoin pour limiter la longueur d’une chaîne est l’extension text. Sans avoir ajouté cette extension, vous avez l’erreur suivante:

The filter « truncate » does not exist in …

Pour l’activer, rendez vous dans votre config.yml, et rajoutez dans le service suivant :

//app/config/config.yml
services:
    twig.extension.text:
       class: Twig_Extensions_Extension_Text
       tags:
           - { name: twig.extension }

 

A partir de là, vous pouvez depuis votre template utiliser le filtre Truncate, avec la syntaxe suivante :

{# in twig template #}
{{ myString | truncate(20, false, '') }}
{# cette première utilsation coupe directement la chaîne myString #}
{{ myString | truncate(20, true, '...') }}
{# cette deuxieme utilsation coupe la chaîne myString en rajoutant ' ... ' à la suite #}

Une autre méthode pour couper une chaîne de caractères avec Twig est de faire comme suivant :

{{ uneVideo.titreVideo[:25] }}

C’est assez explicite aussi de cette façon ! Néanmoins, cette méthode ne permet pas de rajouter des points de suspension en fin de chaîne tronquée… mais si vous avez la solution, je veux bien la connaître par curiosité ;) !

A propos de François Deléglise

Attiré par le multimédia depuis de nombreuses années, j'ai découvert le référencement lors d'un stage de fin d'études en IUT GEii (Lyon, 2008), je suis passionné par le SEO depuis cette date. Je suis diplômé en développement Web (licence MIW de Gap, 2010) et en gestion de projet (Master2 Ingémédia, Toulon, 2012).

Depuis la fin de mes études, je travaille avec l'équipe de Wanadev (Lyon) en tant que chef de projet, développeur symfony2 et référenceur.

19 thoughts on “Limiter la longueur d’une chaîne avec TWIG et le filtre truncate

  1. Thomas says:

    Merci !
    J’ai finalement utilisé l’autre méthode en concaténant les ‘…’ :
    {{ myString|length > 25 ? (myString[:25] ~ ‘…’) : myString }}

      • imane says:

        En fait truncate ne fonctionne pas sur tous les environnements, même si tu passes le paramètre true le mot est coupé au milieu donc pour éviter ce problème j’ai crée mon propre filtre qui coupe une phrase sans couper le mot au milieu.
        Merci!

  2. serge mbele says:

    Bonjour j’ aimerais recuperer une entité à partir d’un repository en lui passant dans la méthode find() la session de la commande de cette façon

    $session = $request->getSession();
    $em = $this->getDoctrine()->getManager();
    //on vérifie si la session n’existe
    if (!$session->has(‘commande’))
    $commande = new Commande();//si c’est le cas, on instancie une commande
    else
    $commande = $em->getRepository(‘EcommerceBundle:Commande’)->find($session->get(‘commande’));//on recupere la commande déjà en session

    mais cela m’envoit cette erreur

    Binding entities to query parameters only allowed for entities that have an identifier.

    j’aimerais votre aide pour résoudre ce problème.Merci d’avance

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">