Wäre es nicht schön, wenn wir HTML und PHP Code ganz voneinander trennen könnten? Jo wäre es. Also nutzen wir Templates.
Wir erstellen eine reine HTML Seite, die unser Layout und sämtliche design-technischen Sachen enthällt.
An den Stellen im Code, wo dynamisch generierter Inhalt hinsoll, setzen wir Platzhalter, die später mit entsprechenden Informationen ersetzt werden.
Ein Beispiel:
layout.html
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <html>
<head>
<title>$title</title>
<script type="text/javascript">
//<![CDATA[
window.google_analytics_uacct = "UA-1691844-1";
//]]>
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="50%" border="1" height="365" align="center">
<tr>
<td valign="top">Hier kommt ein nettes Bildchen hin</td>
</tr>
<tr>
<td valign="top">$inhalt</td>
</tr>
<tr>
<td valign="top">Tutorial by TimeFlash</td>
</tr>
</table>
<div class="footer_morecopyright" style="margin-top: 0px;color:#FFFFFF;">Page Time: <b>0,15939</b> seconds Memory: <b>14,023</b> KB Queries: <b>98</b> Templates: <b>41</b> (<b>21</b> uncached)<br />Server Uptime: <b>23 hours 53 mins</b> Server Load: <b>1.35</b> : 1.46 : 1.43<br /><table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;"><tr><td style="color: #cccccc; text-align: left;"><b>editor_clientscript</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_jsoptions_font</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_jsoptions_size</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie</b></td><td style="padding-left: 10px;">(10)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie_category</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie_row</b></td><td style="padding-left: 10px;">(15)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smiliebox</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_colors</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_fontname</b></td><td style="padding-left: 10px;">(21)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_fontsize</b></td><td style="padding-left: 10px;">(7)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_attachment</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_disablesmiliesoption</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>tagbit_wrapper</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_article_editor</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_content_article_inline</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_content_edit_editbar</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_block</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_metadataeditor</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_page</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_publisher</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_editor_toolbar_on</b></td><td style="padding-left: 10px;">(1)</td></tr></table></div></body>
</html> |
index.php
Code :
1 2 3 4 5 6 7 | function gettemplate($template,$endung="html")
{
return str_replace("\"","\\\"",implode("",file($template.".".$endung)));
}
function dooutput($template) {
echo $template;
} |
PHP-Code:
$title = "Test";
//Der Inhalt wird z.B. aus einer Datenbank geholt
$inhalt = $row[inhalt];
//jetzt der Aufruf, wo das Template geholt wird und die Platzhalter ersetzt werden.
eval("dooutput(\"".gettemplate("layout")."\");");
//Bei eval() muss beachtet werden, dass alle Hochkommas und Variablenzeichen ($) durch ein Backslash markiert werden
?>
ohne ihn andauernd neu zu schreiben. Ansonsten haben wir PHP und HTML vollständig voneinander getrennt, was bedeutet, dass der Designer und der Programmierer getrennt arbeiten
können, ohne den anderen zu behindern.
Das vBulletin arbeitet nach dem gleichen Prinzip.
Regards
TimeFlash
Moin Leute,
da es anscheind Probleme bereitet ein Template mehrfach aufzurufen, zum Beispiel bei einem Gästebuch, erweitern wir das Tutorial mal ein bisschen.
Unsere Templatefunktionen vom ersten Thread: templatefunktionen.php
Code :
1 2 3 4 5 6 7 | function gettemplate($template,$endung="html")
{
return str_replace("\"","\\\"",implode("",file($template.".".$endung)));
}
function dooutput($template) {
echo $template;
} |
Hauptseite: Layout.html
PHP-Code:
<html>
<body>
<script type="text/javascript"><!--
var _gaq = _gaq || [];
_gaq.push(
['_setAccount', 'UA-1691844-1'],
['_trackPageview']
);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//-->
</script>
Also Leute, hier folgt gleich ein Template Test:<br>
$str
Hier ist das Ende.<br>
<div class="footer_morecopyright" style="margin-top: 0px;color:#FFFFFF;">Page Time: <b>0,15939</b> seconds Memory: <b>14,023</b> KB Queries: <b>98</b> Templates: <b>41</b> (<b>21</b> uncached)<br />Server Uptime: <b>23 hours 53 mins</b> Server Load: <b>1.35</b> : 1.46 : 1.43<br /><table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;"><tr><td style="color: #cccccc; text-align: left;"><b>editor_clientscript</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_jsoptions_font</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_jsoptions_size</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie</b></td><td style="padding-left: 10px;">(10)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie_category</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie_row</b></td><td style="padding-left: 10px;">(15)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smiliebox</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_colors</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_fontname</b></td><td style="padding-left: 10px;">(21)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_fontsize</b></td><td style="padding-left: 10px;">(7)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_attachment</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_disablesmiliesoption</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>tagbit_wrapper</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_article_editor</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_content_article_inline</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_content_edit_editbar</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_block</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_metadataeditor</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_page</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_publisher</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_editor_toolbar_on</b></td><td style="padding-left: 10px;">(1)</td></tr></table></div></body>
</html>
PHP-Code:
Dieser Text wird jetzt oft nacheinander angezeigt<b>$inhalt</b>...........<br>
PHP-Code:
<?PHP
include("templatefunktionen.php");
for($inhalt=0;$inhalt<=10;$inhalt++)
{
eval ("\$str .= \"".gettemplate("wiederholung")."\";");
}
eval ("dooutput(\"".gettemplate("Layout")."\");");
?>
Ich denke, dass das Prinzip nun klar ist, wie man ein Template für mehrere Ausgaben benutzt. Viel Spaß damit.
Fragen einfach per PN
Caminus



Kommentar schreiben

Bereiche
Kategorien
Forum - Programming





Artikel bewerten