PowerCMS
Smarty-Tricks
String-Modifikatoren
»Besondere ModifikatorenNachstehend einige Beispiele die man im Prinzip zu Steuerungszwecken verwenden würde, aber mit Strings zu tun haben.
Die Variable test enthält:
Das Template:
Die Ausgabe:
Die PHP Funktion count_chars gibt ein Array zurück in dem die Nummer des Zeichens der Key (Index) ist und der Wert die Anzahl der Zeichen.
Bei diesem Aufruf werden auch die Zeichen gezählt, die nicht im Text vorhanden sind , diese haben dann den Wert 0.
Deswegen wird hier anders vorgegangen und zwar indirekt.
Es wird ein counter verwendet (Smarty - Counter) mit einem Anfangswert von -1 (Arrays in dieser Art fangen bei [0] an.
count_chars wird in Verbindung mit einer Zuweisung (assign) zur Variable test2 genutzt, test2 enthält nun das Array.
Arrays müssen in einer Schleife abgearbeitet werden (foreach).
Bei jedem Durchlauf wird der Counter um einen Wert höher gesetzt.
Damit wir nicht die Anzahl der nicht verwendeten Zeichen (0) erhalten gbt es die Filterung mit der kleinen IF Abfrage.
Die Nummer des Zeichens wird über die PHP Funktion chr als Modifikator in ein Zeichen umgewandelt und danach die Anzahl ausgegeben - fertig.
Das ist hier ein sehr schön es Beispiel dafür, das ein Designer ohne Eingriff in die Programmierung und damit vor allem auch ohne das er auf den Programmierer angewiesen ist, Dinge machen kann, die ohne der Templateengine nicht zu machen wären.
Wir verwenden dazu die PHP Funktion strlen.
Die Variable test hat den Wert
Einsatz:
Ausgabe:
Es gibt unter PHP einige Sortierfunktionen.
In diesem Beispiel verwenden wir die Funktion sort.
Die Variable test enthält ein array :
Das Template:
Die Ausgabe:
Die Zuweisung ist eigentlich eine Dummyzuweisung.
Die Funktion sort gibt einen Wert true oder false zurück, den wir nicht gebrauchen können und deswegen wird er hier abgefangen, ansonsten würde test den Wert true oder false erhalten, nicht aber ein sortiertes Array.
Wichtig ist auch das Zeichen @ vor der Funktion, ansonsten würde es in dem Fall nicht funktionieren.
Arrays werden wie übich in einer Schleife ausgegeben und so auch hier.
Und wie man eindeutig sehen kann - es funktioniert.
Das ist eine Aufgabe, die häufiger zu bewältigen ist.
Wir verwenden die PHP Funktion array_sum.
Die Variable test enthält ein array :
Der Einsatz:
Die Ausgabe:
Hinweis: Auch hier muss das Zeichen @ eingesetzt werden.
Mit der Funktion array_product kann man das Produkt aller Werte des Arrays errechnen.
array_product steht allerdings erst ab PHP 5.1 zur Verfügung.
Die Variable test enthält ein Array:
Der Einsatz ist wie folgt:
Die Ausgabe:
Das ist eine Sache die z.B. hervorragend dazu geeignet ist ein Ereignis zufällig zu machen - z.B. die Ausgabe eines Bildes.
Die Variable test hat folgenden Inhalt:
Im Ernstfall sind das natürlich Links oder Linkteile.
Der Einsatz:
array_rand gibt einen key (Index) zurück.
Deshalb wird der Wert in die Variable index gespeichert.
Damit kann dann der betreffende Wert angezeigt werden.
Interessant wäre es, wenn man ein Array direkt im Template bilden könnte - da hat Smarty jedoch kein Standardplugin um ein Array im Template zuweisen zu können.
Es gibt aber ein Plugin das man sich hier holen kann.
Man muss ja nur fummeln - aber es geht mit der PHP Funktion split.
Das witzige an der Sache - es funktioniert ohne das eine an Smarty bereits zugewiesene Variable vorhanden ist, rein übers Template:
Mit var_dump erfolgt die Kontrollausgabe.
Es wird die PHP Funktion explode verwendet.
Einsatz:
Ausgabe:
Funktionsweise:
, ist der Trenner für die Stringteile.
Man kann natürlich debug von Smarty einsetzen um die Inhalte auszugeben, die Smarty als Variable kennt.
Aber - das ist häufig zu viel des guten.
Mit der PHP Funktion var_dump läßt sich auch das regeln.
Die Variable test ist ein Array mit dem Inhalt:
Der Einsatz:
Die Ausgabe:
Eine wertvolle kleine Hilfe bei der Entwicklung von Templates.
Dafür gibt es die PHP Funktion array_search.
Die Variable test enthält ein array:
Der Einsatz (wir suchen nach "Banane":
Das Ergebnis:
Banane
Im Normalfall möchte man ja nur wissen ob der gesuchte Wert vorhanden ist und will ihn nicht ausgeben.
Beim Einsatz von Smarty capture muss man aufpassen, das da nichts dazwischen steht, ansonsten sind da auch Zeilenumbrüche etc. enthalten und somit ist der Inhalt wertlos.
Vergleichsmöglichkeiten werden benötigt, da man Templates inhaltlich damit gestalten kann.
Wir verwenden hier mal die PHP Funktion strcasecmp,
Aus dem PHP Handbuch:
strcasecmp — Binärer Vergleich von Zeichenketten ohne Unterscheidung der Groß- und Kleinschreibung
Beschreibung int strcasecmp ( string $str1, string $str2 )
Ist str1 kleiner als str2 wird < 0 zurückgegeben, ist str1 größer als str2 > 0, und bei Gleichheit gibt die Funktion 0 zurück.
Wir haben zwei Variable:
Einsatz:
Der Rückgabewert ist 0 da Groß- und Kleinschreibung nicht berücksichtigt werden.
Ändert man den Wert von test auf Halloo - dann ist der Ausgabwert 1.
Läßt man test auf Hallo und ändert man test2 auf halloo ab ist der Wert -1.
Man hat also dann mehrere Möglichkeiten in Templates eine Steuerung vorzunehmen.
Es wird die PHP Funktion rand verwendet.
Einsatz:
Ausgabe:
Es wird eine Zufallszahl angezeigt die zwischen 0 und 10 liegt.
Unter PHP 5 gibt es die Funktion scandir, mit dessen Hilfe man elegant ein Verzeichnis auslesen kann.
Einsatz:
Ausgabe:
Wie es funktioniert:
templates ist das Verzeichnis, das eingelesen werden soll.
Mit |var_dump geben wir hier das Ergebnis aus, es ist immer ein Array.
Geben wir scandir keinen weiteren Parameter mit, wird aufsteigend sortiert.
Beim Aufruf
wird absteigend sortiert, bei
wird nicht sortiert.
Will man es jedoch weiter verarbeiten (das gilt auch für viele andere Beispiele), dann muss man das Ergebnis zuweisen.
Nachfolgend weisen wir das Ergebnis direkt einer Variable mit dem Namen dircontent zu.
Damit könnte man das gewonnene Ergebnis direkt im Template verarbeiten.
Nachfolgend ein Beispiel mit Auswertung um nur Dateien anzuzeigen, welche die Endung tpl haben:
Ausgabe:
Funktionsweise:
Zunächst wird das Verzeichnis wie beschrieben ausgelesen.
Da das Ergebnis ein Array ist erfolgt die Auswertung in einer Schleife (foreach).
Jeder Eintrag wird innerhalb der Schleife der Variable d zugeführt.
Mit
holen wir uns die Dateiinformationen und verwenden dabei die PHP Funktion pathinfo.
Auszug aus dem PHP Handbuch:
pathinfo() gibt ein assoziatives Array mit Informationen über den Pfad path zurück. Die folgenden Arrayelemente werden zurückgegeben: den Verzeichnisnamen dirname, den Dateinamen basename, und die Dateinamenserweiterung extension.
Mit
filtern wir das ganze, da nur die Dateien mit der Endung tpl erwünscht sind und geben die Informationen bei einem Treffer aus.
Das ist übrigens ein Beispiel dafür welche neuen Möglichkeiten man mit Hilfe dieser Modifikator - Methode gewonnen hat. Kein großartiges Gefummel und überraschende Wirkungen und einfache wie auch schnelle LÖsungen.
Es wird die PHP Funktion dirname verwendet.
Einsatz:
Ausgabe:
Es wird die PHP Funktion file_exists verwendet.
Einsatz:
In dem Beispiel wird geprüft ob die Datei index.php existiert.
Diese Funktion ist wertvoll, da so etwas häufig eingesetzt werden kann.
Es wird die PHP Funktion file_get_contents verwendet.
Einsatz:
Funktionserklärung:
Die Datei - hier dargestellt durch dateiname, wird mut file_get_contents eingelesen und direkt der Variable t zugewiesen.
Es wird die PHP Funktion file_put_contents verwendet.
Die Variable t hat den Inhalt:
Einsatz:
{'test.txt'|@file_put_contents:$t}
Ausgabe:
In dem Fall 16 = Anzahl der geschriebenen Bytes.
Funktionsweise:
Die Datei test.txt wird geöffnet oder angelegt und der Inhalt der Variable (Text!) wird geschrieben und die Datei danach geschlossen.
Es wird die PHP Funktion unlink verwendet.
Einsatz:
Ausgabe:
Bei Erfolg 1 ansonsten nichts.
Die Variable test hat den Wert:
Der Aufruf:
Der Ausgabewertwert ist 1 bei Erfolg oder 0 wenn der Versuch erfolglos war.
Der Cookie hat den Wert der inhalt.
Normalerweise würde man den Wert nicht ausgeben sondern mit einem assign abfangen.
Cookies werden in der globalen PHP - Variable $_COOKIE gespeichert.
Unter Smarty würde sich der Wert direkt abrufen und somit auswerten lassen.
Mit dem Trick hat man natürlich ziemliche Gestaltungsmöglichkeiten !
Smarty übergibt immer die Variable als ersten Parameter.
Das aber funktioniert nicht bei allen PHP Funktionen, die erwarten an der Stelle etwas anderes.
Nachfolgend zeige ich am Beispiel der PHP Funktion date wie man das übergeht.
Wir verwenden die PHP Funktion date.
Aus dem PHP Handbuch:
string date ( string $Format [, int $Timestamp] )
Der erste Parameter muss also ein String mit den Formatangaben sein.
Die Variable zeit hat einen Timestamp als Information zu Datum und Uhrzeit.
Der Aufruf ist eine linke Bazille - wir modifizieren die Formatangabe und nicht wie manche es erwarten würden die Information der Variable zeit.
Das können wir machen weil als Endprodukt nicht das Format sondern die formatierte Datum - Uhrzeitangabe ausgegeben wird - darauf muss man erst einmal kommen:
Die Ausgabe:
Mit dieser Methode lassen sich auch andere PHP Funktionen überlisten, die ansonsten nicht für uns in der Form arbeiten wollen.
Wir verwenden die PHP Funktion round.
Einsatz:
Ausgabe:
In dem Beispiel wurde ein Wert direkt eingegeben, normal wäre die Übergabe einer Variablen.
Die :2 sagt der Funktion, das sie auf 2 Kommastellen runden soll.
Wir verwenden die PHP Funktion ceil.
Einsatz:
Ausgabe:
Letzte Änderung auf dieser Seite am: 09.02.2008 12:37:47
Vorherige Seite:
String-Modifikatoren
| Nächste Seite:
PowerSite TPLE