2013-10-21 7 views
9

Wie kann ich eine Stringlänge begrenzen? Ich bekomme einen Beschreibungswert von meiner Datenbank, aber ich möchte nur eine Anzahl von bestimmten Zeichen anzeigen.Limit String Twig

  • Wie kann ich das in meiner Zweigvorlage tun?
  • Ist es besser, es in meinem Controller zu tun?

Antwort

10

Versuchen mit Kürzen Funktion:

Zuerst müssen Sie aktiviert Text Erweiterung:

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

Dann Sie truncate() Helfer in Ihrem Zweig Vorlage wie folgt aufrufen können:

{{ variable.description | truncate(100, true) }} 
+0

sollte es keinen Raum zwischen dem Rohr und der Filternamen sein: '| trunkate', andernfalls sucht twig nach einem Filter namens 'truncate' (mit vorangestelltem Leerzeichen). – Tim

+0

Zuerst müssen wir die Zweig Erweiterung Bibliotheken installieren. Es ist [hier] (https://github.com/twigphp/Twig-extensions). –

21

Versuchen Sie folgendes:

{{ entity.description|striptags|slice(0, 40) }} 
  1. die striptags filter wird die HTML-Tags entfernen, wird dies zu vermeiden, dass ein Tag in 2, Beispiel dieser Basisfall zu schneiden: Text ... <img src="http://examp
  2. die slice filter wird der Text abgeschnitten, nur halten die 40 ersten Zeichen
+0

Ich kann das überprüfen funktioniert. Ich habe einen Inhaltstyp namens Auszug erstellt, und ich brauchte eine kleine Beschreibung mit maximal 100 Zeichen. –

1

so ein paar oben aufgeführten Optionen es gibt, die jedes Detail nicht gegeben sind, also hier ein bisschen mehr Info:

{{ variable.description|truncate(100) }} 

Dies wird Ihren Text bei 100 Zeichen genau abschneiden. Das Problem hierbei ist, dass wenn das 100. Zeichen in der Mitte eines Wortes steht, dieses Wort halbiert wird.

Also, dies zu umgehen, wir ‚true‘ in den truncate Anruf hinzufügen:

{{ variable.description|truncate(100, true) }} 

Wenn wir dies tun, truncate werden prüfen, ob wir in der Mitte eines Wortes im Schnitt sind

-off Punkt und wenn wir sind, wird es die Schnur am Ende dieses Wortes schneiden.

Wenn wir auch eine Zeichenfolge abzuschneiden suchen, der einige HTML enthalten, müssen wir weg zuerst diese Tags Streifen:

{{ (variable.description|striptags)|truncate(100) }} 

Der einzige kleine Nachteil ist, dass wir alle Zeilenumbrüche verlieren (wie diejenigen, die in Absatz-Tags eingebaut sind). Wenn Sie jedoch eine relativ kurze Zeichenfolge abschneiden, ist dies möglicherweise kein Problem.

0

Ich weiß, dass dies keine Antwort auf Ihre spezifische Frage ist, da Sie auf eine bestimmte Anzahl von Zeichen abschneiden möchten, aber etwas Ähnliches kann auch mit CSS erreicht werden. Das ist, es sei denn, Sie unterstützen immer noch IE8 und IE9, dann gibt es einige Vorbehalte.

Bei einem Textüberlauf kann dies mit dem Ellipsenwert erfolgen.Hier ist ein Beispiel von CSS-TRICKS:

.truncate { 
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
} 

Dies ermöglicht Ihnen, den Text in die Container Breite zu kürzen, jedoch für die spezifischen Charakter zählt die akzeptierte TWIG Auflösung mit der TRUNCATE Funktion perfekt funktioniert.

REFERENZ:https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/

6

ich verwenden, um diese Blog-Beiträge zu kürzen und ein Auslassungszeichen zeigen ..

{{ post.excerpt|striptags|length > 100 ? post.excerpt|striptags|slice(0, 100) ~ '...' : post.excerpt|striptags }} 

Wenn der Post Ausschnitt Länge größer als 100 Zeichen dann slice es am 100s Charakter Beginnen Sie mit dem ersten und fügen Sie einen '...' hinzu. Ansonsten zeigen Sie den vollständigen Text an.

+0

'Striptags' wird verwendet, um die Länge der Zeichenfolge zu berechnen, die Zeichenfolge jedoch nicht zu beschneiden. Was passiert, wenn die Zeichenfolge mit einem Tag beginnt? –

+0

Was schlägst du vor? –

+1

Bewerben 'Striptags' vor dem zweiten' Slice'. –

0

Sie könnten diese Zweigverlängerung verwenden :

Nutzungs

{{ text|ellipsis(20) }} 
{{ text|ellipsis(20, '///') }} 

namespace AppBundle\Twig; 

//src/AppBundle/Twig/TwigTextExtension.php 
class TwigTextExtension extends \Twig_Extension 
{ 
    public function getFilters() 
    { 
     return array(
      new \Twig_SimpleFilter('ellipsis', array($this, 'ellipsisFilter')), 
     ); 
    } 

    public function ellipsisFilter($text, $maxLen = 50, $ellipsis = '...') 
    { 
     if (strlen($text) <= $maxLen) 
      return $text; 
     return substr($text, 0, $maxLen-3).$ellipsis; 

    } 
} 

es als Dienst in services.yml Registrieren

services: 
    twig.extension.twigtext: 
     class: AppBundle\Twig\TwigTextExtension 
     tags: 
      - { name: twig.extension }