Mailinglisten-Archive |
Andre Gemünd wrote: > Kontrollstrukturen sind nun einmal Programmierung, und die hat wenn man > _wirklich_ trennen will, nichts im Template verloren. Du trennst in Programmierer und Designer. Ich trenne in Businesslogik/Daten und Ausgabelogik/Layout. Und habe Designer, die bei {if} und {foreach} nicht gleich überfordert zusammenbrechen.. ;-) > In meinen Templates sind lediglich die Blöcke gekennzeichnet, sonst pures > HTML. IT[X] Blöcke sind nichts anderes, als jedesmal individuell vorbereitete Kontrollstrukturen für die Ausgabe. Um das zu folgendem IT[X] Template: ------------------------------------------------------------------------ <table cellpadding="2" cellspacing="0" border="1"> <!-- INCLUDE table_header.html --> <- wir sind wieder OnTopic!!! ;-) <!-- BEGIN table_row --> <tr> <td bgcolor="func_bgcolor('#CCCCCC', '#F0F0F0')">{first_name}</td> <td bgcolor="func_bgcolor('#CCCCCC', '#F0F0F0')">{last_name}</td> </tr> <!-- END table_row --> </table> ------------------------------------------------------------------------ äquivalente Smarty-Template zu rendern, reicht in der Businesslogik folgender Code: ------------------------------------------------------------------------ $data = array ( 0 => array('first' => "Mein", 'last'=> "Name"), ... ); $tpl->assign("data", $data); $tpl->display("table.tpl"); ------------------------------------------------------------------------ wobei das Template nur unwesentlich komplexer wird: ------------------------------------------------------------------------ <table cellpadding="2" cellspacing="0" border="1"> {include file=table_header.tpl} {foreach item=name from=$data} <tr> <td bgcolor="{cycle values="#CCCCCC,#F0F0F0}">{$name.first}</td> <td bgcolor="{cycle values="#CCCCCC,#F0F0F0}">{$name.last}</td> </tr> {/foreach} </table> ------------------------------------------------------------------------ > Jede Iteration etc. läuft in den Scripts, nur so ist für mich eine > sinnvolle Trennung zu erreichen. Bei IT[X] mußt du dich um die Iteration im Template (Block markieren der iteriert werden soll) und im Script kümmern. Das ist zum Teil redundant und erfordert deshalb im Script etwas mehr Code: function toggle($item1, $item2) { static $i = 1; return $i++ % 2? $item1: $item2; } $tpl->setCallbackFunction('bgcolor', 'toggle'); foreach ($data as $name) { $tpl->setVariable(array( 'first_name' => $name[0], 'last_name' => $name[1] )); $tpl->parse('table_row'); } [Beispiel von: http://kuerzer.de/sigma.intro-syntax] > Wenn ich eine Bedingung ändern will, dann möchte ich dafür nicht das > Template UND das Script ändern, sondern lediglich das Script, das Template > bleibt unberührt, weil ich ja nichts am Aussehen, sondern etwas an der Logik > ändern möchte. Eine Bedingung in der Businesslogik änderst du im Script, eine Bedingung fürs Layout (wenn es sinnvoll ist) im Template. Smarty --------script---------------------------- $tpl->assign("errmsg", $error); --------template-------------------------- {if $errmsg} FEHLER:{$errmsg} {/if} IT[X] --------script---------------------------- if(!empty($error)) { $tpl->setVariable("errmsg", $error); $tpl->parse('error_block'); } --------template-------------------------- <!-- BEGIN error --> FEHLER:{errmsg} <!-- END error --> > Zum angeblich erhöhten Gesamtaufwand ist zu sagen, das sich jeder der Deine > Templates editieren will, erstmal mit der Smarty-Syntax vertraut machen > muss, was für mich entscheidend den Aufwand erhöht. Hält man die Templates frei von Businesslogik, die dort ja nicht hingehört, und beschränkt sich auf einen Funktionsumfang, der dem von IT[X] entspricht, ist der Aufwand für das Erlernens der notwendigen Smarty-Syntax nur unwesentlich höher. Ich würde sagen: 15 statt 5 Minuten bei einem Designer, der schon IT[X]-verblendet ist... ;-) Die holt man aber locker wieder rein, weil man sich das ganze manuelle iterieren und parsen der Blöcke spart und der Code zudem übersichtlicher wird (bitte korrigieren falls ich Blödsinn erzähle). > Aber wenn wir so weitermachen, entwickeln wir dann bald innerhalb von Smarty > eine weitere Sprache? Brauchst Du nicht, gibts schon: http://smarty.php.net/manual/de/language.function.php.php ThS. -- Dipl. Ing. Thomas Schulz 4bconsult - Beratung für die Baubranche Engeldamm 22 b - 10179 Berlin büro 030 - 27 59 16 67 fax 030 - 27 59 16 68 http://4bconsult.de
php::bar PHP Wiki - Listenarchive