Tutorial Teil 3

Dieser Teil des Tutorials beschäftigt sich mit dem Aufbau einer Detailübersicht. Die detaillierten Daten zu den einzelnen Programmen sollen von der Gesamtübersicht aus abrufbar sein. Außerdem soll es möglich sein, über die neu in die Datenbank eingefügten Merkmale Datenbasis und Typ in der Gesamtansicht eine Vorselektion der Datensätze vorzunehmen.

Außerdem sollen die Seiten, die die einzelnen Programme und die Auswahllisten nach Datenbasis und Typ anzeigen, über suchmaschinenfreundliche URL erreichbar sein. Dafür werden im PHP-Programm die entsprechenden Vorkehrungen getroffen, die dann mit einer .htaccess-Datei zur Wirkung gebracht werden.

Die SQLite-Datenbank

Die SQLite-Datenbank php-programme.db3 wird um eine ganze Reihe von Feldern erweitert. Die SQL-Anweisung zur Erstellung der Datenbank lautet:

CREATE TABLE "phpprogramme" ("id" INTEGER PRIMARY KEY ,"programmname" TEXT,"verzeichnis" TEXT,"datenbasis" TEXT,"beschreibung1" TEXT,"beschreibung_d" TEXT,"typ" TEXT DEFAULT (null) ,"screenshot" TEXT DEFAULT (null) ,"bemerkung" TEXT,"tags" TEXT,"beispiel_produktion" TEXT,"beispiel_test" TEXT)

Die Selektion nach Datenbasis und Typ wird datenbankseitig durch zwei Views unterstützt. Views sind Objekte, die selbst keine Daten enthalten, sondern die Daten einer Tabelle selektieren und sortieren. Die Views haben die Namen datenbasisverzeichnis und typverzeichnis. datenbasisverzeichnis wird mit der folgenden SQL-Anweisung erstellt

CREATE VIEW `datenbasisverzeichnis` 
AS
SELECT 
      id,
      datenbasis
FROM 
      phpprogramme


GROUP BY 
       datenbasis

ORDER BY 
       datenbasis Asc

typverzeichnis wird mit der folgenden SQL-Anweisung erstellt

CREATE VIEW `typverzeichnis`
AS
SELECT 
      id,
      typ
FROM 
      phpprogramme


GROUP BY 
       typ

ORDER BY 
       typ Asc

Zur Erstellung der Views kann man sehr gut den Visual Query Builder des Programms SQLite3 Management Studion benutzen.

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öcke tr und td werden durch Kommantarzeilen voneinander abgegrenzt. Die Übereinstimmung der Blocknamen mit den verwendeten HTML-Tags ist nicht zwingend notwendig. Die Blöcke könnten auch einfach zeile und zelle heißen. Die müsste dann aber auch in der Datei index.php so verwendet werden.