Tom: (Anfängerfrage) Menü-Steuerung (ohne URL auszulesen?)

Beitrag lesen

Hello,

Ich habe nichts passendes gefunden.
Bitte zeige mir die Treffer, die du meinst, vielleicht habe ich sie übersehen.

Du hast gar nicht ernsthaft gesucht. Gib's doch ruhig zu!
Du bist doch sonst immer so pfiffig :-)

aktives Template    -> Kontrolle abgeben
    passives Template   -> Kontrolle behalten

Ich verstehe dich leider immer noch nicht.
Die Kontrolle über was?

Über den Programmablauf! Um was sollte es beim Programmieren sonst gehen?

Was ist daran im Kontext von "Programmierung" nicht zu verstehen, wenn man sagt "die Kontrolle abgeben" oder "die Kontrolle behalten"? Tut mir leid, ich rede deutsch. Solltest Du irgendwelche Affensprache dafür haben wollen, musst Du sie Dir selber raussuchen. *~#!

Nach meinem Verständnis ist ein Template dazu da, ihm übergebene Werte darzustellen. Wo findet hier ein Kontrolle statt?

Ein Template ist dazu da, festzulegen, an welcher Stelle Werte dargestellt werden sollen. Das ist richtig. Dazu muss es aber nicht selber aktiv werden. Das ist sogar i.A. unerwünscht.

Nur bei den PHP-Anwendern hat sich leider die Unsitte durchgesetzt, den Templates die Kontrolle zu übergeben, also im Template aktiven PHP-Code zu schreiben. Das liegt vrmutlich daran, dass PHP ohnehin eine eingebettete Sprache ist.

Durch Befehle, wie include(), require(), eval(), exec(), usw. wird die Kontrolle vom zur zeit aktiven Programm an das geladene Codesegment übergeben.

Durch Befehle wie read(), str_replace(), preg_replace() usw. behält das aktive Programm die Kontrolle über das geladene / behandelte Codesegment und kann mit diesen weiterhin nach seinem Plan verfahren.

Ein passives Template für PHP könnte z.B. so aussehen:

#--- templatedatei.html ---

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title><!--{TITLE}--></title>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  <style type="text/css">
     <!--{CSS-general}-->
  </style>
</head>
    <body>
        <!--{BODY-head}-->
        <!--{BODY-content}-->
        <!--{BODY-bottom}-->
    </body>
</html>

#--------------------------

Die Daten, die vom Programm zusammengestellt wurden, können nun durch ein einfaches str_replace() dort eingestanzt werden, ohne die Programmkontrolle an das Template zu übergeben.

<?php  ### template-engine.php ###

$html = file_get_contents('templatedatei.html');

$_output = array();

# ---[1]--- die beiden folgenden Zeilen zum Testen mal auskommentieren
    $_output['<'.'?php'] = '<!-- php: ';   ## PHP-Starttags beseitigen
    $_output['?'.'>']    = ' -->';         ## PHP-Endtags beseitigen

$_output['<!--{TITLE}-->'] = 'mein erstes passives Template';
    # ...
    $_output['<!--{BODY-content}-->] = '<p>hier kommt dann der Content</p>';

$html = str_replace(array_keys($_output),$_output,$html);
    echo $html;

?>

#---------------------------

[1] PHP-Start- und Endtags, die sich fälschlicherweise doch im Template befinden könnten, werden beseitigt, um den Browser nicht zu verwirren. Da sie von PHP selbst unberührt bleiben, würden sie sonst mit ausgegeben werden.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de