Tutorial Teil 2

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

Der Einleitungsteil wurde nicht verändert, hinzugefügt wurde nur

$installdir = "/".basename (getcwd ())."/";

um darauf reagieren zu können, wenn das Programm nicht im Hauptverzeichnis installiert ist.

Der zentrale Teil des Programms besteht aus eine if..else..else-Abfrage der GET-Variablen. Dieser Teil sieht so aus (Der Code enthält noch Kommentarzeilen, die dem Test dienten) :

// Verarbeitung der GET-Variablen
if ($_GET["programm"]){
	//echo ($_GET["programm"]);
	zeigeeinprogramm ($_GET["programm"]);
	}

elseif ($_GET["datenbasis"]){
	//echo $_GET["datenbasis"];
	zeigealleprogrammemitdatenbasis($_GET["datenbasis"]);
	}	

elseif ($_GET["typ"]){
	//echo $_GET["datenbasis"];
	zeigealleprogrammemittyp($_GET["typ"]);
	}	
	
else {
	// Übersicht der Progamme ausgeben
	// echo "kein Parameter";
	zeigealleprogramme();
	}

Für jede der Funktionalitäten muss es also eine entsprechende Unterfunktion geben.

function zeigealleprogramme ()

Der erste Teil dieser Funktion ist aus dem ersten Teil des Tutorials bekannt. Neu sind die Zeilen 2,3 und 13 für die Weitergabe des Installationsverzeichnisses sowie die Zeilen 27-48, mit denen die Views datenbasisverzeichnis und typverzeichnis abgefragt werden und die Daten zur Übergabe an das Template aufbereitet werden.

function zeigealleprogramme () {
	//Globale Variabel verfügbar machen
	$installdir = $GLOBALS['installdir'];
	// 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
	// Installationsverzeichnis
	$template->setVariable ("Installationsverzeichnis",$installdir);
	// Seitentitel
	$template->setVariable ("SeitenTitel","PHP Programme - Version 02 - Auflistung und Details");

	// 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");
	}
	// Uebersicht Datenbasis
	// Alle Eintraege
	// Variablen in einer FOR schleife für eine Tabelle setzen
	$eintraege = R::find("datenbasisverzeichnis", " id > 0 "); 
	foreach($eintraege as $eintrag)
	{
		//echo $eintrag->datenbasis;
		$template->setVariable ("Datenbasis",$eintrag->datenbasis);
		$template->addBlock ("daba");
	}
	// Uebersicht Typ
	// Alle Eintraege
	// Variablen in einer FOR schleife für eine Tabelle setzen
	$eintraege = R::find("typverzeichnis", " id > 0 "); 
	foreach($eintraege as $eintrag)
	{
		//echo $eintrag->datenbasis;
		$template->setVariable ("Typ",$eintrag->typ);
		$template->addBlock ("typ");
	}

	// Template ausgeben							
	$template->generateOutput(); 
	}

function zeigealleprogrammemitdatenbasis ($datenbasis) und function zeigealleprogrammemittyp ($typ)

Diese beiden Funktionen sind nahezu identisch aufgebaut.

 

function zeigeeinprogramm ($verzeichnisname)