Archive for the ‘Smarty’ Category

Smarty truncate trotz htmlentities

Monday, April 26th, 2010

Wer Strings kürzen möchte die html Codiert sind (alle Sonderzeichen ersetzt durch die Entsprechende HTML Codes. z.B. ö = ö oder & = &) wird schnell feststellen das es zu unschönen Effekten kommt.

Der String “CD & DVD & Video” wird sehr kurz da er im HTML als “CD & DVD & Video” dargestellt wird. Somit sind die String extrem ungleich lang. Wer zusätzlich auch noch nach einer festen Länge abschneiden muss und nicht darauf achten kann das nur nach ganze Wörter gekürzt wird hat mit Ergebnissen wie “CD & DVD $am” zu rechnen.

Die Lösung ist so einfach wie einleuchtend. Der zu kürzende String wird zuvor wieder in die angezeigte Form gewandelt, gekürzt und anschließend um valides HTML zu behalten zurück in die HTML Form gebracht.

{$String|html_entity_decode:2:”UTF-8″|truncate:17:”…”:true|htmlentities:2:”UTF-8″}

… jup gibt eigentlich nix weiter zu sagen. Simple und doch hat es eine Weile gedauert bis man drauf gekommen ist. Viel Spaß damit.

Smarty und der Zufall.

Thursday, February 19th, 2009

Seit längerem hab ich eine Möglichkeit gesucht möglichst einfach HTML Bausteine zufällig rotieren zu lassen. Es versteht sich von selbst das der Aufwand möglichst gering und die Änderungen ausschließlich in der Termplate Ebene statt finden sollten.

Smarty gibt die Möglichkeit von Hause aus nicht her. Ein Modul für smarty zu schreiben war ich zu faul. Darum folgt die schnelle Lösung.

1
{php}$this->_tpl_vars['intRandNumber']= rand(2,5);{/php}

Nachtrag: Noch eleganter ist es natürlich gar kein PHP zu verwenden und die Variable in Smarty folgendermaßen zuzuweisen:

1
{assign var="intRandNumber" value=2|rand:5}

Danke an Lars für den Hinweis!

Diese Zeile fügt, in einem Smarty Template, eine Variable hinzu die mit einer zufälligen Zahl zwischen 2 und 5 gefüllt wird. Auf diese Variable kann im Template wie gewohnt mit {$intRandNumber} zugegriffen werden.

Eine Möglichkeit diese Zahl zu nutzten wäre eine elseif Struktur.

1
2
3
4
5
6
7
8
{* Ostern *}
{if $intRandNumber == 2}
{include file="../templates/html/include/teaser/20090220_ostern.tpl"}
 
{* Garten *}
{elseif $intRandNumber == 3}
{include file="../templates/html/include/teaser/20090220_garten.tpl"}
{/if}

Einfach, Schnell und sehr praktisch.

Quellen: PHP rand(), smarty