Linuchs: Templates: Zwischen Möglichkeiten entscheiden

Moin,

immer mal wieder werden hier Platzhalter-Dateien diskutiert, sogenannte Templates.

Und immer mal wieder sehe ich Sourcecodes von HTML-Dateien, die ein Gerüst von Containern aufbauen, sie aber nicht füllen und dann wieder schließen.

Also heiße Luft im Web verteilen.

Wie sieht bei euch eine Template-Datei mit "Entscheidungen" aus und wie wird sie angesteuert? Zu diesem Thema habe ich bisher noch keine Tipps gelesen und möchte gerne mal diskutieren, ob meine selbst gefundene Lösung "Standard" ist.

In meinen PHP-Dateien fülle ich ein Array, die Keys korrespondieren mit den Platzhaltern der Template-Dateien.

p593t.php (Programm):

$display[] = array(
 'segment'              => 'teilnehmer_position'
,'[HOST]'               =>  $bia_domain
,'[&lang]'              =>  $bia_lang
,'[art]'                =>  $row['art']
,'[teilnehmer_lfd]'     =>  ++$teilnehmer_lfd

,'@_VIP|'               =>( $row['art'] == 'VIP' && $row['anz_events']    ) ? '' : '@'  // mind. 1 Event. Link!
,'@_VIP0|'              =>( $row['art'] == 'VIP' &&!$row['anz_events']    ) ? '' : '@'  // kein Event
,'@_VIP1|'              =>( $row['art'] == 'VIP' && $row['anz_events']==1 ) ? '' : '@'  // 1 Event
,'@_VIP_1+|'            =>( $row['art'] == 'VIP' && $row['anz_events'] >1 ) ? '' : '@'  // 2..n Events
,'@_VIP_10+|'           =>( $row['art'] == 'VIP' && $row['anz_events'] >10) ? '' : '@'  // 11..n Events
,'@_VIP_20+|'           =>( $row['art'] == 'VIP' && $row['anz_events'] >20) ? '' : '@'  // 21..n Events
,'@_VIP_30+|'           =>( $row['art'] == 'VIP' && $row['anz_events'] >30) ? '' : '@'  // 31..n Events
...

p593t_de.php (Platzhalter-Datei deutsch => Altes Konzept, inzwischen aber mehrsprachig trotz de):

...
<!-- [teilnehmer_position] -->
<div onclick="switchMarkierung(this)" style="padding-top:1em;margin-top:1em;border-top:1px solid #a00">
@_homepage|<h3 class=re><a href="[adr_homepage]"><img class=ic src="../img/icon_home.png" alt="HP" /></a></h3>
<h3>[teilnehmer_lfd]. &nbsp; <i class="cgrau em08">[art]</i> \
@_VIP|<b><a href="http://remso.eu/?VIP=[adr_id]" title="VIP=[adr_id]">\
[name]\
@_VIP|</a></b>\
@_ITR| &nbsp; <i class="crot">nicht registriert</i> <img class=ic_gr src="img/smily_rot.gif" alt="-" />\
@_VIP0| &nbsp; <i class="crot">kein Event gemeldet</i> <img class=ic_gr src="img/smily_rot.gif" alt="-" />\
@_VIP1| &nbsp; <i class="cdgelb">1 Event gemeldet</i> <img class=ic_gr src="img/smily_gelb.gif" alt="+" />\
@_VIP_1+| &nbsp; <i class="cdgruen">[anz_events] Events gemeldet</i> <img class=ic_gr src="img/smily_gruen.gif" alt="++" />\
@_VIP_10+| <img class=ic_gr src="img/smily_gruen.gif" alt="++" />\
@_VIP_20+| <img class=ic_gr src="img/smily_gruen.gif" alt="++" />\
@_VIP_30+| <img class=ic_gr src="img/smily_gruen.gif" alt="++" />\
@_kontakt|<br><small>[adr_funktion]: [adr_vname] [adr_nname], [adr_ort_name]</small>\
</h3>
@ farbiges Bild:
@_bild_VIP|<div class="mb05" style="width:100%;border:1px solid #888;"><img src="[adr_bild_url]" style="width:100%" alt=""></div>\
@ sw Bild:
@_bild_VIP0|<div class="mb05" style="width:100%;max-height:5em;overflow-x:hidden;border:1px solid #888;"><img class="bild_VIP0" src="[adr_bild_url]" style="width:100%" alt=""></div>\
@ sw Bild opacity:
@_bild_ITR|<div class="mb05" style="width:100%;max-height:5em;overflow-x:hidden;border:1px solid #888;"><img class="bild_ITR" src="[adr_bild_url]" style="width:100%" alt=""></div>\
</div>

<!-- [/teilnehmer_position] -->
...

Keine Ahnung, ob das "zu kompliziert" ist und wie es sonst gemacht wird. Meine Lösung ist extrem variabel, aber mit den zunehmenden Möglichkeiten geht es auch auf die Laufzeit. Besonders bei Listen mit mehreren hundert Positionen.

Das hier genannte Beispiel erzeugt z.B. diese Webseite und läuft 2 .. 4 sec im Server, je nach dessen Auslastung. Siehe unten rechts. Zusätzlich Versand und Aufbau im Browser.

Linuchs

  1. Uups ... sehe gerade, dass mein Beispiel hier total unverständlich dargestellt wird, weil die Entscheider @_xxx für eine Zeile gelten, hier aber beliebig umgebrochen wird und die Zeilen nicht mehr erkennbar sind.

    Wer Interesse hat, hier die Template-Datei Original: http://remso.eu/500/p593t_de.htm bitte im Quellcode ansehen.

    Linuchs

    1. Nicht entscheidend für diese Diskussion, aber ganz schön zu sehen, wie die drei hinterlegten Sprachen de, en, nl im Template wirken, die vom Browser gesteuert werden: Der zwangsweise Aufruf hat aber Vorrang.

      ###nicht registriert###not registered###niet geregistreerd###
      ###kein Event gemeldet###no event reported###geen evenement gemeld###
      1 ###Event gemeldet###event reported###evenement gemeld###
      [anz_events] ###Events gemeldet###events reported###evenementen gemeld###
      

      http://remso.eu/?TID=18662&lg=de

      http://remso.eu/?TID=18662&lg=en

      http://remso.eu/?TID=18662&lg=nl

      Linuchs

  2. Moin,

    nur allgemein meine Erfahrung: if/else verwende ich nur in einem kleinen Rahmen. Für größere Geschichten ist es besser, das Template auszutauschen und eine dritte Möglichkeit besteht darin, das Template mit Trennlinien/Boundaries in einzelne Abschnitte zu unterteilen, die der Code dann gezielt auswählt und ggf. in verschiedener Reihenfolge für die Ausgabe zusammensetzt.

    .pl