Archiv der Kategorie: smarty

Arrayelemente zählen mit Smarty

Die Anzahl der Elemente eines Arrays in Smarty erhält man mit


{$myArray|@count}

oder mit


{@count($myArray)}

Damit lassen sich schöne Ausgaben zaubern, in dem man etwa prüft, ob ein Array Werte beinhaltet (z.B. nach einer DB-Abfrage) oder eben nicht und dann, je nachdem, die Ausgabe Benutzerfreundlich macht:


{if @count($myArray)>0}
Toll, es gibt {@count($myArray)} Einträge 🙂
{else}
Sorry, keine Einträge gefunden 🙁
{/if}

Die Angabe des @-Modifikators gibt an, dass nun eine PHP Funktion folgt. Intern wird also die PHP-Funktion count aufgerufen und dessen Rückgabe dann eingesetzt und benutzt.

Aber aufpassen: Wenn die $security Variable auf true steht, dann muss jede PHP-Funktion, die man so benutzen möchte, auch im $security_settings[‚MODIFIER_FUNCS‘]-Array stehen, sonst funktioniert der Aufruf nicht!

Quelle: Smarty-Doku, Kapitel 5 – Variablen Modifikatoren

Smarty und der dynamische Zugriff auf Arrays

Innerhalb einer Smarty {section} muss auf ein Array zugegriffen werden, allerdings mit dem Array-Index eines anderen Arrays. Abhängig von der Position der {section} kommt also immer ein anderer index.

Beispiel:

{section name=”num” loop=$data1}
  {$data1[num].ID}
{/section}

In {$data[num].ID} steht der Index des Arrays “data2”, auf den ich zugreifen möchte.

Allerdings, so ein Konstrukt funktioniert dann nicht:

{section name=”num” loop=$data1}
  {$data2.daten[$data1[num].ID]}
{/section}

{$data2.daten} ist wiederrum ein array und dort stehen dann die Daten drin. Leider funktioniert diese Methode nicht.

Nach kurzem und scharfen Nachdenken kam ich dann drauf, man setzt eine temporäre Smarty-Variable, abhängig vom Wert der {section} und das geht mit {assign}:

{section name=”num” loop=$data1}
{assign var=”meineID” value=$data1[num].ID}
  {$data2.daten[$meineID]}
{/section}

Gut zu wissen…

Mehrfachdurchlauf von Variablen mit Smarty

Mein Problem war vor kurzem, dass ich an Smarty (die Template Engine) per PHP ein Array übergebe, welches dargestellt werden sollte.
So weit, so einfach, allerdings sollten die Daten sowohl Neben- wie auch untereinander dargestellt werden. Ich erklärs mal grafisch; die Ausgabe sollte in etwa so aussehen:

Wert1 Wert2 Wert3 Wert4
Wert5 Wert6 Wert7 Wert8

usw.

Ich hoffe, es ist klar, was ich machen will. So, es ist ebenfalls anzumerken, dass ich die Werte nur einmal an Smarty als Array übergebe, die ganze „Arbeit“ also in Smarty erledigt werden sollte – was ja auch so sein sollte, da es sich um eine reine Darstellungsproblematik handelte.

Wie das ganze in PHP zu lösen wäre ist mir klar, ich möchte allerdings wirklich streng den Code von der Darstellung trennen.

Hier mal die Lösung zum Problem:
Zunächste definiert man eine section, die das übergebene Array durchläuft, allerdings mit Schrittweite 4. Dannach übergibt man die gleiche Array-Variable an cycle und weist dem Ergebnis eine andere Variable zu, auf die man dann zugreift.

{section name=number loop=$myVariable step=4}
    {cycle values=$myVariable print=false
           assign=myData}
    {$myData.arrayElement|upper}
{/section}

Das ganze nun geschickt in eine Table oder div Struktur eingebaut bringt dann das gewünschte Ergebnis, vier Werte nebeneinander und dann beliebig viele untereinandern.

Ich hoffe, ich konnte nun dem ein oder anderen helfen…

tpl-Dateien in eclipse oder Zend Studio bearbeiten

Ich arbeite bei meiner PHP-Entwicklung sehr viel mit smarty zusammen, einer wunderbaren Template-Engine. Meine derzeitige IDE ist eclipse und diese kann, normalerweise, die tpl Dateien von smarty – die der Engine als HTML-Vorlage dienen – nichts anfangen und stellt die tpl´s als Text dar.

Nun wäre es viel schöner und auch viel übersichtlicher, wenn eclipse die tpl´s auch mit Syntax Coloring darstellen könnte.

Hier zeig ich euch mal, was ihr einstellen müsst.

In eclipse geht ihr im Menü “Window” auf “Preferences”, es erscheint ein neuer Dialog.

01-fileassoc

Dort geht ihr auf “General” –> “Editors” und “File Associations” und wählt rechts den Punkt “Add”.

02-addnewfileassoc

Als neuen Typ gebt ihr “*.tpl” ein und sagt “Ok”

03-newfileassoc

Nun gebt ihr zu diesem neuen Typ noch die möglichen “Views” an, also bei mir wähle ich über den Punkt “Add” (rechts) die dargestellten Typen, wichtig hierbei der Typ “HTML Editor” und diesen auf “default” stellen.

Jetzt müssen wir nur noch den “Content Type” der tpl´s mit einer HTML-Ansicht verknüpfen und das ganze ist fertig.

04-contenttypes

Dazu unter “General” –> “Content Types” wie im Bild “Text” aufklappen und HTML auswählen, unten dann noch “*.tpl” hinzufügen und den ganzen Dialog mit “Ok” schließen.

Sobald ihr nun eine tpl-Datei in eclipse neu öffnet, wird die entsprechende HTML Ansicht geöffnet, welche euch u.a. auch Syntax Coloring bietet.

Viel Spaß beim coden…