Template, eine Art Container auf HTMLBasis mit
Daten aus einer Datenbank zu füllen.
Dazu erstmal ein paar Worte zum Thema Templates :
Template = Container
Datenbank = Quelle
URL = Rohrleitung
ID = Ventil
Das Template ist einfach eine HTML Datei in der bestimmte
Platzhalter festgelegt werden die später durch Inhalt ersetzt
werden (verzeiht mein Deutsch)
Welche Datenbank ihr als Quelle benutzt ist letztendlich egal.
Ob eine Textdatei dafür herhalten muss oder ihr die Daten in
einer MySQL/Oracle/etc DB ablegt bleibt euch (bzw. eurem
Geldbeutel) überlassen.
Die URL dient in diesem Fall als Rohrleitung um der Datenbank
zu sagen welche Inhalte sie laden soll. (Ihr könnt natürlich
auch die ID über POST weitergeben oder über die Session, aber
warum komplizierter machen als es ist)
Die ID ist die genaue Adresse des Inhaltes in der Datenbank.
Wenn wir ein solches System benutzen, sieht ein Link zu einer
Seite in eurer Page folgendermaßen aus :
PHP-Code:
<a rel="nofollow" href="http://www.tutorials.de/index.php?id=1">Home</a>
<a rel="nofollow" href="http://www.tutorials.de/index.php?id=2">About</a>
<a rel="nofollow" href="http://www.tutorials.de/index.php?id=3">Gbook</a>
den Inhalt der ID x und fügt ihn in euer Template ein.
Ich erläutere noch kurz ein kleines System für sehr einfache
Verwaltung einer Homepage. In einer Datenbank werden folgende
Tabellen erstellt : "doc_desc" für die Beschreibung jedes
Dokumentes das später auf der Seite über eine ID abrufbar
sein soll. Für jede ID die ihr als Link einfügt, muss ein
Eintrag in der Datenbank existieren, sonst bekommt ihr Fehler-
meldungen. (Die Befehle zur Erstellung der Tabellen habe ich
in der angehängten zip-Datei mitgegeben.)
In doc_desc wird die Beschreibung jedes einzelnen Dokumentes
gespeichert, wobei "id" die genaue Adresse für den Aufruf,
"title" der Inhalt des Platzhalters {TITLE}, "template" die
Position des Templates bzw. dessen Name, "css" die Position
des Stylesheets bzw. dessen Name und "c_id" die Adresse des
Textinhaltes ist.
+doc_desc
- id
- title
- template
- css
- c_id
In doc_text steht der Textinhalt bzw. dessen Adresse "id".
+doc_text
- id
- text
Hier nun ein Beispiel Template, allerdings ein ganz Simples.
Platzhalte werden mit geschweiften Klammern umschlossen.
{ PLATZHALTER }
PHP-Code:
<html>
<head>
<title>{TITLE}</title>
<link rel="Stylesheet" href="http://www.tutorials.de/{CSS}" type="text/css">
<script type="text/javascript">
//<![CDATA[
window.google_analytics_uacct = "UA-1691844-1";
//]]>
</script>
</head>
<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>
<table width="100%" height="100%" align="center" valign="middle">
<tr>
<td align="center">
<table width="600" height="400">
<tr>
<td width="125" height="350" class="text">
<table width="125" height="350">
<tr>
<td align="center" valign="top">
<a href="http://www.tutorials.de" target="_blank">Tutorials.de</a><br>
<a onclick="_gaq.push(['_trackEvent', 'Outgoing', 'selfhtml.teamone.de', '']);" href="http://selfhtml.teamone.de" target="_blank">SelfHTML</a><br>
<a onclick="_gaq.push(['_trackEvent', 'Outgoing', 'www.schattenbaum.net', '/php']);" href="http://www.schattenbaum.net/php" target="_blank">PHP Einsteiger</a>
</td>
</tr>
</table>
</td>
<td width="350" height="350" class="text">
<table width="350" height="350">
<tr>
<td align="left" valign="top"> {TEXT} </td>
</tr>
</table>
</td>
<td width="125" height="350" class="text">
<table width="125" height="350">
<tr>
<td align="center" valign="top">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td></td>
<td align="center" class="text">© by <a href="mailto:jonathan@silberkind.de?subject=NightX" class="email">Nils 'Jonathan' Adomeit</a> (2002, 2003)</td>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
<div class="footer_morecopyright" style="margin-top: 0px;color:#FFFFFF;">Page Time: <b>0,12983</b> seconds Memory: <b>12,976</b> KB Queries: <b>103</b> Templates: <b>42</b> (<b>22</b> uncached)<br />Server Uptime: <b>23 hours 50 mins</b> Server Load: <b>1.56</b> : 1.36 : 1.39<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_attachmentbit</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>
das System zu starten, bzw. zu nutzen :
PHP-Code:
<?php
//Script zum zeilenweisen Parsen von HTML Templates
//20.03.2003 Nils 'Jonathan' Hitze LV1.3
//Einbinden der Template Klasse
include("class_tpl_parser_lite.inc.php");
//Uservariablen fuer den Datenbankzugang
$mysql["host"] = "127.0.0.1"; //Datenbankserver
$mysql["user"] = "nutzer"; //Datenbanknutzer
$mysql["password"] = "passwort"; //Datenbankpasswort
$mysql["database"] = "datenbank"; //Datenbank
//Definition der ID, Wenn keine ID uebergeben wurde
//nimmt das System die Standard ID
if(!isset($_GET["id"])) $id = 1;
if(!isset($id)) $id = $_GET["id"];
//Datenbankverbindung aufbauen und Datenbank auswaehlen
mysql_connect($mysql["host"],$mysql["user"],$mysql["password"]);
mysql_select_db($mysql["database"]);
//Datenbankabfrage zusammenstellen
$sql = "SELECT * FROM doc_desc, doc_text "
. "WHERE doc_desc.c_id = doc_text.id AND doc_text.id = $id";
//Datenbank wird abgefragt
$_result = mysql_query($sql);
//Das Ergebniss wird in dem Feld ($_array) gespeichert
$_array = mysql_fetch_assoc($_result);
//Definition der Variablen durch die die Platzhalter ersetzt werden.
$title = $_array["title"];
$css = $_array["css"];
$template = $_array["template"];
$text = $_array["text"];
//Array mit den Platzhaltern (Keys) und den Inhalten.
$var_array = array("TITLE" => $title,
"CSS" => $css,
"TEXT" => $text);
//Initialisierung der Klasse und Parsen des Templates
$tpl = new parser($template, $var_array);
?>
PHP-Code:
<?php
//Klasse zum Parsen von HTML Templates
//Lite Version
//20.03.2003 Nils 'Jonathan' Hitze LV1.3
Class parser
{
var $template;
var $temp_content;
function parser($template, $var_array)
{
$this->template = $template;
$this->temp_content = file($this->template);
$parsed = $this->rplc($var_array);
echo(implode("", $this->temp_content));
}
function rplc($var_array)
{
foreach($var_array as $key => $value)
{
//$regex[var_name] : {VARIABLE}
$regex['var_name'] = "#{[[:space:]]*?(".strtoupper($key)."){1,}?[[:space:]]*?}#si";
$this->temp_content = preg_replace($regex['var_name'], $value, $this->temp_content);
}
}
}
?>
anfangen und nutzt es fleissig um euch die komplexeren Sachen
in PHP selber beizubringen. Das System ist sehr einfach gehalten,
in der großen Version nightx (wahrscheinlich nie erhältlich) gibt es
eine eigene Syntax für Methoden/Funktionsaufrüfe und Blockweises
parsen plus jede Menge Extra Klassen. Aber dazu irgendwann anders
mehr.
Verbreitet dieses System wie ihr es für Richtig haltet, es ist
zur Modifikation freigegeben. Wenn ihr Ideen für Verbesserungen
habt, schreibt mir doch bitte eine kurze Mail.
Nils 'Jonathan' Adomeit



Kommentar schreiben

Bereiche
Kategorien
Forum - Programming





Artikel bewerten