Tutorial Teil 1
Verzeichnisstruktur
- Im Hauptverzeichnis der Anwendung befindet sich nur die Datei
index.php
und später noch die Datei.htaccess
- im Verzeichnis
/class
befinden sich die KlassenbiliothekenMiniTemplator.class.php
undrb.php
- Im Verzeichnis
/db
befindet sich die SQLite-Datenbank - Im Verzeichnis
/templates
befinden sich die Templates
Die SQLite-Datenbank
Die SQLite-Datenbank php-programme.db3
enthält zunächst nur die Tabelle programmname mit 3 Feldern. Die SQL-Anweisung zur Erstellung der Datenbank lautet:
CREATE TABLE "phpprogramme" ("id" INTEGER PRIMARY KEY ,"programmname" TEXT,"verzeichnis" TEXT)
Zur Erstellung der Datenbank kann man das Firefox Plugin SQLite Manager oder das Programm SQLite3 Management Studion benutzen.
Schutz der SQLite-Datenbank
SQLite-Datenbank lassen sich nicht ohne weiteres vor dem Zugriff durch Unbefugte Schützen. daher füge ich im Verzeichnis eine .htaccess-Datei ein, die Verhindert, dass jemand die datenbank auf seinen PC lädt:
<FilesMatch "\.(sqlite|sdb|s3db|db3)$"> Deny from all </FilesMatch>
Die Datei index.php
Diese Datei ist die zentrale Verarbeitungsdatei. Ihr Inhalt sieht so aus:
<?php // Melde alle PHP Fehler (siehe Changelog) // error_reporting(E_ALL); // Melde alle Fehler außer E_NOTICE // Dies ist der Vorgabewert in php.ini error_reporting(E_ALL ^ E_NOTICE); // Error Reporting komplett abschalten // error_reporting(0); //Klassen einbinden require_once("class/rb.php"); require_once("class/MiniTemplator.class.php"); //Datenbank festlegen R::setup("sqlite:db/php-programme.db3"); zeigealleprogramme(); function zeigealleprogramme () { // Neue Template Instanz $template = new MiniTemplator; // Prüfung ob das Template vorhanden ist if (!$template->readTemplateFromFile("templates/php-programme.htm")) die ("MiniTemplator.readTemplateFromFile failed."); // Einfache Variablen setzen $template->setVariable ("SeitenTitel","PHP Programme - Version 01 - einfache Auflistung"); // Allgemeine Uebersicht // Alle Eintraege // Variablen in einer FOR schleife für eine Tabelle setzen $eintraege = R::find("phpprogramme", " id > 0 "); foreach($eintraege as $eintrag) { $template->setVariable ("ID",$eintrag->id); $template->setVariable ("Programmname",$eintrag->programmname); $template->setVariable ("Verzeichnis",$eintrag->verzeichnis); $template->addBlock ("td"); $template->addBlock ("tr"); } // Template ausgeben $template->generateOutput(); } ?>
Die Datei habe ich umfangreich kommentiert. Dennoch einige Anmerkungen:
- Das error_reporting kann je nach Bedarf vollkommen abgeschaltet oder weiter verstärkt werden.
- Die in Zeile 15 verwendete Setup-Funktion ist in RedBaens definiert. Achtung: wenn die Datei nicht vorhanden ist, dann legt RedBeans sie an, allerdings ohne eine definierte Struktur
- damit der Code übersichtlich und wartungsfreundlich bleibt werden alle Funktionalitäten in Funktionen zusammengefasst.
- Zeilen 21-40: Nachdem das Template initialisiert und allgemeine Variablen zugewiesen wurden, erfolgt eine Datenbankabfrage, deren Ergebnis dann in einer foreach-Schleife verarbeitet wird. Dabei werden Variablen des Templates mit Inhalten belegt und Templateblöcke hinzugefügt. Schließlich wird das Template ausgegeben.
Die Template-Datei php-programme.htm
Die Datei hat diesen Inhalt
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Übersicht ${SeitenTitel}</title> <style> /* hier ausgelassen */ </style> </head> <body> <div id="wrapper"> <h1>Übersicht ${SeitenTitel}</h1> <table id="gesamttabelle" border="1"> <tr> <td>Nummer</td> <td>Programmname</td> <td>Verzeichnis</td> </tr> <!-- $BeginBlock tr --> <tr> <!-- $BeginBlock td --> <td>${ID}</td> <td>${Programmname}</td> <td>${Verzeichnis}</td> <!-- $EndBlock td --> </tr> <!-- $EndBlock tr --> </table> </div> </div><!-- Ende wrapper --> </body> </html>
- Bereits in den Zeilen 5 und 12 wird eine in
index.php
verwendete Variable ausgegeben. - die in
index.php
aufgerufenen Templateblöcketr
undtd
werden durch Kommantarzeilen voneinander abgegrenzt. Die Übereinstimmung der Blocknamen mit den verwendeten HTML-Tags ist nicht zwingend notwendig. Die Blöcke könnten auch einfachzeile
undzelle
heißen. Die müsste dann aber auch in der Dateiindex.php
so verwendet werden.