Smarty-Modifier: “CloseTags” (nicht nur) für xt:Commerce

Manchmal braucht man im Shop abgekürzte Texte - Für solche Zwecke ist der Smarty-Modifier “truncate” geeignet. Eine detaillierte Beschreibung ist direkt auf der » Smarty-Website zu finden.

Je nach Input kann man damit aber auch ein komplettes Layout zerschießen. Was ein nicht-geschlossenes <div> oder gar <table> oder Ähnliches “anrichten” kann, braucht vermutlich kaum weiter erläutert zu werden.

Zum Ausprobieren kann man einfach einmal Folgendes in eine Template-Datei schreiben:

{php}
$this->assign('Dings','<b><i>Das ist ein Test-String</i></b>.');
{/php}
{$Dings|truncate:20}

Ausgegeben wird dann ganz brav Folgendes …

<b><i>Das ist ein...

… und weil weder <b> noch <i> geschlossen wird, erscheint so ziemlich alles, was im Quelltext danach auftaucht, in freundlichem FettKursiv - was meistens reichlich doof aussieht.

:-)

Sanft untertrieben.

 

Abhilfe: Smarty-Modifier “CloseTags”

Das Problem ist bekannt, eine erste Lösung gibt’s bereits: Der Modifier » CloseTags kann auf der Smarty-Website heruntergeladen werden.

Diese Version arbeitet jedoch nicht zuverlässig, Tags wie z.B. <del> o.ä. werden nicht erkannt, ebenso reagiert der Modifier nicht auf HTML-Tags in Großbuchstaben (okay, macht “man” ja nicht, taucht aber bei einigen Text-Importen dann und wann mal auf.)

Ich habe den Modifier daher ein bisschen überarbeitet, so dass (hoffentlich) alle Tags erkannt und in der umgekehrten Reihenfolge wieder geschlossen werden.

Beispiel:

{php}
$this->assign('TestA','<del>Das ist ein Test-String</del>.');
$this->assign('TestB','<B><I>Das ist ein Test-String</I></B>.');
{/php}

{$TestA|truncate:20|CloseTags}
{$TestB|truncate:20|CloseTags}

HTML-Ausgabe:

<del>Das ist ein...</del>
<B><I>Das ist ein...</I></B>

 

Download

» modifier_close_tags_v2.zip (Version 2.0, März 2007)

 

Kurzanleitung

  1. Legen Sie einen zusätzlichen PlugIn-Ordner für Ihr Template fest
    (Eine Anleitung dazu finden Sie » hier …)
  2. Speichern Sie die entpackte Datei in diesem Ordner ab
  3. Danach kann der Modifier im Template benutzt werden
  4. Tipp: Erst “truncate” und danach “CloseTags” einsetzen