Liebe Forengemeinschaft,
nach dem ich schon hier viel tolles gelsen habe, bin ich einfach begeistert über dieses Forum! Niergends sooooviel Profissionalität gelsen!!!
Nun ich hab leider ein Problem und komme nicht dahinter was es sein kann!
Ich hab mir vorgenommen eine Templates Verabeitungs Classe zu schreiben, der nur ein Start-Templatename übergen werden soll und den rest soll bitte schön diese doch aus dem Template herauslesen!
Nun die Idee habe ich schon lange, alerding hapert es etwas mit der realisierung. Als inspiration habe ich mir die tollen Tutorials von hier genommen.
Diese hier:
Ein eigenes Templatesystem schreiben von Corvin Gröning
[php] Ein einfaches Template-System von MrNiceGuy
DANKE Leute!!!
Ich hab versuch aus diesen beiden Tutorials, wie ich meine, die Vorteile in eine Classe zusammen zu fassen.
Hier ist sie:
Korrigiert!
PHP-Code:
/*
* Template Verarbeitung
*
* Enthält Methoden zum verarbeiten der Templates
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
class templateVerarbeitung
{
//######################################################################
// Variablen der Klasse
//######################################################################
/*
* Der linke Delimiter für einen Platzhalter
*
* @access public
* @var string
*/
protected $delimiter_left = '{';
/*
* Der rechte Delimiter für einen Platzhalter
*
* @access public
* @var string
*/
protected $delimiter_right = '}';
/*
* Inhalt des Templates.
*
* @access protected
* @var array
*/
protected $template = array();
/*
* Objekt für den Datenbankzugriff.
*
* @access protected
* @var object
*/
protected $obj_db = "";
/*
* Name der Tabelle mit Templates.
*
* @access protected
* @var string
*/
protected $tpl_table = "";
/*
* Pfad der Funktionsdateien.
*
* @access protected
* @var string
*/
protected $dir_functions = "";
/*
* Dateiendungen der Funktionsdateien.
*
* @access protected
* @var string
*/
protected $file_endung = "";
/**
* Konfigurations-Status der Klasse.
*
* @access protected
* @var boolean
*/
protected $config = false;
//######################################################################
// Methoden der Klasse
//######################################################################
/*
* Klasse konfigurieren
*
* @access public
* @param object $obj_db Objekt für den Datenbankzugriff
* @param string $tpl_table Name der Tabelle mit Templates
* @param string $dir_functions Pfad der Funktionsdateien
* @param string $file_endung Dateiendung der Funktionsdateien (Standart *.php)
* @return boolean
*/
public function config(&$obj_db,
$tpl_table,
$dir_functions,
$file_endung = ".php")
{
// Prüfen ob Variablen mit Werten gefüllt wurden
if (!empty ($obj_db)
&& !empty ($tpl_table)
&& !empty ($dir_functions))
{
$this->obj_db = $obj_db;
$this->tpl_table = $tpl_table;
$this->dir_functions = $dir_functions;
$this->file_endung = $file_endung;
$this->config = true;
return true;
}
return false;
}
/*
* Initiator der Klasse, starten der Abarbeitung
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
public function init($tpl_name)
{
if ($this->config)
{
$this->lade_tpl($tpl_name);
$this->ersetze_platzhalter($tpl_name);
return true;
}
return false;
}
/*
* Template laden
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function lade_tpl($tpl_name)
{
if (isset($this->template[$tpl_name]) === true)
{
// Template wurde schon geladen
return true;
}
else
{
// Template laden
$this->obj_db->anfrage("SELECT template_inhalt FROM "
. $this->tpl_table
. " WHERE template_name = '"
. $tpl_name . "'");
$tpl_daten = $this->obj_db->auslese();
// Template speichern
$this->template[$tpl_name] = $tpl_daten['template_inhalt'][0];
return true;
}
}
/*
* Aufruffunktion zum ersetzen von Platzhalter
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function ersetze_platzhalter($tpl_name)
{
$this->ersetze_variable($tpl_name);
$this->ersetze_array($tpl_name);
$this->ersetze_template($tpl_name);
$this->ersetze_file($tpl_name);
$this->ersetze_function($tpl_name);
return true;
}
/*
* Platzhalter {$varname} ersetzen
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function ersetze_variable($tpl_name)
{
$this->template[$tpl_name] = preg_replace_callback('/' . $this->delimiter_left . '(\$(.*))' . $this->delimiter_right . '/isU',
create_function('$treffer', 'return $GLOBALS[$treffer[2]];'),
$this->template[$tpl_name]);
return true;
}
/*
* Platzhalter {array="arrayname[indexname]"} ersetzen
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function ersetze_array($tpl_name)
{
while (preg_match('/' . $this->delimiter_left . 'array=\"(.*)\[(.*)\]\"' . $this->delimiter_right . '/isU', $this->template[$tpl_name], $treffer))
{
// Array bereitstellen
$array =& $GLOBALS[$treffer[1]];
$this->template[$tpl_name] = preg_replace('/' . $this->delimiter_left . 'array=\"' . $treffer[1] . '\[' . $treffer[2] . '\]\"' . $this->delimiter_right . '/isUe',
'$array[$treffer[2]]',
$this->template[$tpl_name]);
}
return true;
}
/*
* Platzhalter {template="templatename"} ersetzen
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function ersetze_template($tpl_name)
{
while (preg_match('/' . $this->delimiter_left . 'template=\"(.*)\"' . $this->delimiter_right . '/isU', $this->template[$tpl_name], $treffer))
{
// Template laden und vorbereiten
$this->lade_tpl($treffer[1]);
$this->ersetze_platzhalter($treffer[1]);
$this->template[$tpl_name] = preg_replace('/' . $this->delimiter_left . 'template=\"' . $treffer[1] . '\"' . $this->delimiter_right . '/isUe',
'$this->template[$treffer[1]]',
$this->template[$tpl_name]);
}
return true;
}
/*
* Platzhalter {file="dateipfad"} ersetzen
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function ersetze_file($tpl_name)
{
// Datei-Inhalt einlesen und einfügen
$this->template[$tpl_name] = preg_replace('/' . $this->delimiter_left . 'file=\"((.*)\.(.*))\"' . $this->delimiter_right . '/isUe',
'file_get_contents(ROOT_DIR . "/$2.$3")',
$this->template[$tpl_name]);
return true;
}
/*
* Platzhalter {function="funktionname()"} ersetzen
*
* @access protected
* @param string $tpl_name Name des Templates
* @return boolean
*/
protected function ersetze_function($tpl_name)
{
while (preg_match('/' . $this->delimiter_left . 'function=\"(.*)\((.*)\)\"' . $this->delimiter_right . '/isU', $this->template[$tpl_name], $treffer))
{
// Prüfen ob die Funktion schon vorhanden ist und ob die Datei existiert
if (!function_exists($treffer[1]) && file_exists($this->dir_functions . $treffer[1] . $this->file_endung))
{
// Laden der Datei mit der Funktion
include_once($this->dir_functions . $treffer[1] . $this->file_endung);
}
// Wenn die Funktion vorhanden ist, wird diese ausgeführt
if (function_exists($treffer[1]))
{
$this->template[$tpl_name] = preg_replace('/' . $this->delimiter_left . 'function=\"' . $treffer[1] . '\(' . $treffer[2] . '\)\"' . $this->delimiter_right . '/isUe',
'' . $treffer[1] . '(' . $treffer[2] .')',
$this->template[$tpl_name]);
}
}
return true;
}
/*
* Template ausgeben
*
* @access public
* @param string $tpl_name Name des Templates
* @return boolean
*/
public function show($tpl_name)
{
echo $this->template[$tpl_name];
return true;
}
}
Meine Vermutung ist, dass es an dem übergebendem Objekt liegt! Scheinbar funktioniert es nicht so wie ich es mir vorgestellt hatte!
Hier noch die Datenbankzugriff Classe:
PHP-Code:
/*
* Datenbankzugriff Klasse (MySQL)
*
* Enthält Methoden zum arbeiten mit der Datenbank
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
class dbMysql
{
//######################################################################
// Variablen der Klasse
//######################################################################
/*
* Datenbank Servername.
*
* @access protected
* @var string
*/
protected $db_host;
/*
* Datenbank Benutzer.
*
* @access protected
* @var string
*/
protected $db_user;
/*
* Datenbank Passwort.
*
* @access protected
* @var string
*/
protected $db_psw;
/*
* Datenbank Name.
*
* @access protected
* @var string
*/
protected $db_name;
/*
* Tabellen Präfix.
*
* @access protected
* @var string
*/
protected $tb_prfx;
/*
* Datenbank Verbindungskennung.
*
* @access protected
* @var string
*/
protected $db_verbindung = false;
/*
* Ergebnis des letzten SQL-Befehl.
*
* @access protected
* @var string
*/
protected $sql_query = false;
/*
* Anzahl der betroffenen Datensätze.
*
* @access public
* @var string
*/
public $ds_anzahl = false;
//######################################################################
// Methoden der Klasse
//######################################################################
/*
* Klasse konfigurieren
*
* @access public
* @param string $db_host Datenbank Servername
* @param string $db_user Datenbank Benutzer
* @param string $db_psw Datenbank Passwort
* @param string $db_name Datenbank Name
* @param string $tb_prfx Tabellen Präfix
* @return boolean
*/
public function config($db_host,
$db_user,
$db_psw,
$db_name,
$tb_prfx = "")
{
// Prüfen ob Variablen mit Werten gefüllt wurden
if (!empty ($db_host)
&& !empty ($db_user)
&& !empty ($db_psw)
&& !empty ($db_name))
{
$this->db_host = $db_host;
$this->db_user = $db_user;
$this->db_psw = $db_psw;
$this->db_name = $db_name;
$this->tb_prfx = $tb_prfx;
return true;
}
return false;
}
/*
* Stellt eine Verbindung zu der Datenbank her
*
* @access public
*/
public function verbinde()
{
$this->db_verbindung = mysql_connect($this->db_host,
$this->db_user,
$this->db_psw
);
// Wählt die Datenbank aus
$this->auswaehle();
}
/*
* Auswahl einer Datenbank
*
* @access public
* @param string $db_name Datenbank Name
*/
public function auswaehle($db_name = NULL)
{
if (!$db_name)
{
$db_name = $this->db_name;
}
mysql_select_db($db_name, $this->db_verbindung);
}
/*
* Beendet die Datenbank Verbindung
*
* @access public
*/
public function trenne()
{
mysql_close($this->db_verbindung);
}
/*
* Sendet eine Anfrage an die Datenbank
*
* @access public
* @param string $sql SQL Befehl
*/
public function anfrage($sql)
{
$this->sql_query = mysql_query($sql, $this->db_verbindung);
// Speichert die Anzahl der Betroffenen Datensätze
if (stristr($sql, "SELECT") !== false)
{
$this->ds_anzahl = mysql_num_rows($this->sql_query);
}
else
{
$this->ds_anzahl = mysql_affected_rows();
}
}
/*
* Stellt ein Array mit Informationen bereit aus dem Ergebnis der zuvor
* gestellten Datenbank Anfrage
*
* @access public
* @return array Datensätze aus der Datenbank
* boolean
*/
public function auslese()
{
if ($this->sql_query)
{
// Liest eine Zeile aus
for ($i = 0; $dt_zeile = mysql_fetch_array($this->sql_query); $i++)
{
// Läuft die Spalten durch
foreach ($dt_zeile as $spalte => $inhalt)
{
// Erstellen der Datensätze Array's
$daten[$spalte][$i] = $inhalt;
}
}
// Übergibt den Datensätze Array
return $daten;
}
else
{
// Gibt FALSE zurück falls keine Anfrage vorher stattgefunden hat
return false;
}
}
}
Die Fehlermeldungen die ich bekomme sind folgende:
Code:
Warning: mysql_num_rows(:( supplied argument is not a valid MySQL result resource in ...\class_dbMysql.php on line 183
Notice: Undefined index: templatename in ...\class_templateVerarbeitung.php on line 205
Ich bin ratlos!
Nach der zweiten Meldung, wird kein Template gespeichert! Obwohl der teil des Codes ausgeführt wird!
Und in der Warnung steht, dass kein richtiges Ergebnis aus der Datenbank anfrage zu stande kommt!
Wenn noch irgendwelche Erleuterungen notwedigt sind, einfach schreiben!
Könnt ihr mir weiter helfen?