Smarty Rekursion in einem Template
Es kommt öfters vor, dass man ein Array ausgeben möchte, ohne die Tiefe zu kennen. Baumstrukturen oder Verzeichnislistings sind Beispiele dafür. Mit PHP und anderen Skriptsprachen lässt sich eine solche Struktur leicht mithilfe von Rekursion ausgeben.
Ich persönlich benutze seit geraumer Zeit die Smarty Template Engine, welche die Möglichkeit der Rekursion in Templates leider bisher vermissen lässt.
Wer jedoch zwischen den Zeilen liest, findet im Smarty-Forum eine Lösung, diese Funktionalität trotzdem implementieren zu können.
1) Aktuelle Version des Plugins compiler.defun herunterladen (Kompatibel mit PHP4+)
2) Die heruntergeladene Datei compiler.defun.php in das Plugins-Verzeichnis von Smarty kopieren (smarty/libs/plugins/)
3) Folgende Template-Datei als test.tpl in das Smarty-Template-Verzeichnis (normalerweise templates/) erstellen, welche ein verschachteltes Array ausgeben soll:
<ul>
{defun name="testrecursion" list=$tree}
{foreach from=$list item=node}
<li><span>{$node.caption} ({$node.access_string})</span>{if $node.children}<ul>
{fun name="testrecursion" list=$node.children}</ul>{/if}</li>
{/foreach}
{/defun}
</ul>
4) Zuletzt mit folgendem Quellcode eine Datei test.php erzeugen, welche Smarty instanziert und ein verschachteltes Array zuweißt:
<?php
require_once 'smarty/libs/Smarty.class.php';
$smarty = new smarty();
$smarty->assign("tree",array(
0=>array(
"caption"=>"Hallo",
"access_string"=>"hallo.html",
"children"=>array()
),
1=>array(
"caption"=>"Huhu",
"access_string"=>"huhu.html",
"children"=>array(
0=>array(
"caption"=>"Wuhu",
"access_string"=>"huhu/wuhu.html",
"children"=>array()
),
1=>array(
"caption"=>"Bla",
"access_string"=>"huhu/bla.html",
"children"=>array(
0=>array(
"caption"=>"Waha",
"access_string"=>"huhu/bla/waha.html",
"children"=>array(
0=>array(
"caption"=>"Ariba",
"access_string"=>"huhu/bla/waha/ariba.html",
"children"=>array(
0=>array(
"caption"=>"Wabadu",
"access_string"=>"huhu/bla/waha/ariba/wabadu.html",
"children"=>array()
),
1=>array(
"caption"=>"Wabadi",
"access_string"=>"huhu/bla/waha/ariba/wabadi.html",
"children"=>array(
0=>array(
"caption"=>"Hallo",
"access_string"=>"huhu/bla/waha/ariba/wabadi/hallo.html",
"children"=>array()
)
)
)
)
)
)
)
)
),
2=>array(
"caption"=>"Wau",
"access_string"=>"huhu/wau.html",
"children"=>array()
)
)
),
2=>array(
"caption"=>"Maeh",
"access_string"=>"maeh.html",
"children"=>array(
0=>array(
"caption"=>"Muh",
"access_string"=>"maeh/muh.html",
"children"=>array()
)
)
)
));
$smarty->display("test.tpl");
?>
Kommentare
Eine Antwort verfassen
Kategorien
Seiten
Projekte
Schlagwörter
- .NET
- Abmahnung
- automatisch
- Backup
- Bugs
- C#
- Class
- Click
- Cronjob
- dictionary
- Event
- Exception
- Funktion
- GO
- Google Analytics
- IIS
- Internet Explorer
- Java
- JavaScript
- JDBC
- jQuery
- MySQL
- MySQLDu
- PHP
- Plesk
- Recht
- Rekursion
- Script
- ServiceContract
- ServiceKnownType
- Session
- Shortcut
- Smarty
- soap
- SoapClient
- SQL Server
- Tabellen
- Tabs
- Tastenkombination
- Update
- verbinden
- Version
- WCF
- Windows Server
- WinSCP
