phpbar.de logo

Mailinglisten-Archive

[pear] ITX Frage

[pear] ITX Frage

Thomas Schulz ths at 4bconsult.de
Fre Mai 9 21:59:36 CEST 2003


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