Hallo liebe PHP Freunde.
Mein Problem ist kein Problem das noch keiner hatte.
Daher habe ich seit über einer Woche das Internet durchsucht nach Lösungen.
Es gab auch diverse Lösungsvorschläge für mein Problem, leider waren diese meist nur sehr speziell und nicht für mich anwendbar oder für mich total unverständlich.
Die Konsequenz daraus ist, dass ich nun euch hier fragen muss, obwohl sich der ein oder andere sicher gerade denkt: Das hatten wir doch alles schon.
Naja nur das vorweg.
Nun mein Problem.
Ich möchte meine Seite mit Templates ausstatten, dazu habe ich mir eine Testumgebung geschaffen, die aus drei Dateien besteht.
1. news.php
2. template.class.php
3. news.tpl
Wir Ihr erkennt, sind das die drei Grundvoraussetzungen für ein Templatesystem.
Als erstes der Code von allen drei Dateien:
1. news.php
2. template.class.php
3. news.tpl
Wie man an den Dateien hoffentlich erkennt, soll es sich um eine Newsseite handeln.
Der Code ist bewusster Weise sehr klein gehalten, da es mir ja hier nur um die wesentlichen Dinge geht.
In der Datei news.php wird die Datenbank ausgelesen.
Das funktioniert 1a.
Die template.class.php ist das Herzstück, hier wird die Templatedatei (news.tpl) mit dem Code der news.php vereint.
Für nur quasi einen Wert klappt das 1a.
Also so wie das Beispiel da steht, wird mir eben immer der letzte Wert der DB ausgespuckt.
Nun habe ich eben im Internet gesehen, dass andere Coder es so machen, dass sie folgenden Teil
einmal einlesen und so oft mit Werten füllen, wie Datensätze in der Datenbank stehen.
Nur leider habe ich keine Ahnung, wie ich soetwas machen soll.
Habe mir auch schon die Varianten von phpbb2 angeschaut, dort wird eine Funktion namens assign_block_vars verwendet.
Ich denke diese Funktion macht in etwa das, was ich brauche.
Leider sehe ich da nicht im geringsten durch.
Kann mir also jemand Schritt für Schritt erklären, wie ich es schaffe,
dass der Teil zwischen
<!--- BEGIN newsrow --->
und
<!--- END newsrow --->
so oft mit den richtigen Variablen gefüllt wird, wie es Datensätze in der Datenbank gibt.
Dafür wäre ich euch sehr verbunden :>
Mit freundlichen Grüßen Sodan und danke im Voraus
Mein Problem ist kein Problem das noch keiner hatte.
Daher habe ich seit über einer Woche das Internet durchsucht nach Lösungen.
Es gab auch diverse Lösungsvorschläge für mein Problem, leider waren diese meist nur sehr speziell und nicht für mich anwendbar oder für mich total unverständlich.
Die Konsequenz daraus ist, dass ich nun euch hier fragen muss, obwohl sich der ein oder andere sicher gerade denkt: Das hatten wir doch alles schon.
Naja nur das vorweg.
Nun mein Problem.
Ich möchte meine Seite mit Templates ausstatten, dazu habe ich mir eine Testumgebung geschaffen, die aus drei Dateien besteht.
1. news.php
2. template.class.php
3. news.tpl
Wir Ihr erkennt, sind das die drei Grundvoraussetzungen für ein Templatesystem.
Als erstes der Code von allen drei Dateien:
1. news.php
PHP-Code:
include('config.inc.php');
include('template.class.php');
$SQL = "SELECT news_author, news_text ".
"FROM news ";
$DATA = mysql_query($SQL);
while ( $row = mysql_fetch_array($DATA) )
{
$author = $row['news_author'];
$text = $row['news_text'];
}
$values = array (
'AUTHOR' => $author,
'TEXT' => $text
);
$template = new template();
$template->read_template_file('news.tpl');
$template->replace_content($values);
$template->parse_content();
PHP-Code:
class template
{
var $tmp_file;
var $content;
function read_template_file($source)
{
$this->tmp_file = $source;
if( !file_exists ( $this->tmp_file ) )
{
echo "Konnte Template-File <b>". $this->tmp_file ."</b> nicht lesen!";
}
else
{
$this->content = file_get_contents($this->tmp_file);
return $this->content;
}
}
function replace_content($array)
{
foreach ( $array as $keyname => $value )
{
$this->content = str_replace ( "{". $keyname ."}", $value, $this->content );
}
}
function parse_content()
{
echo $this->content;
}
}
PHP-Code:
<html>
<body>
<!--- BEGIN newsrow --->
Autor: {AUTHOR} <br>
Text: {TEXT}<br>
<!--- END newsrow --->
</body>
</html>
Der Code ist bewusster Weise sehr klein gehalten, da es mir ja hier nur um die wesentlichen Dinge geht.
In der Datei news.php wird die Datenbank ausgelesen.
Das funktioniert 1a.
Die template.class.php ist das Herzstück, hier wird die Templatedatei (news.tpl) mit dem Code der news.php vereint.
Für nur quasi einen Wert klappt das 1a.
Also so wie das Beispiel da steht, wird mir eben immer der letzte Wert der DB ausgespuckt.
Nun habe ich eben im Internet gesehen, dass andere Coder es so machen, dass sie folgenden Teil
PHP-Code:
<!--- BEGIN newsrow --->
Autor: {AUTHOR} <br>
Text: {TEXT}<br>
<!--- END newsrow --->
Nur leider habe ich keine Ahnung, wie ich soetwas machen soll.
Habe mir auch schon die Varianten von phpbb2 angeschaut, dort wird eine Funktion namens assign_block_vars verwendet.
Ich denke diese Funktion macht in etwa das, was ich brauche.
Leider sehe ich da nicht im geringsten durch.
Kann mir also jemand Schritt für Schritt erklären, wie ich es schaffe,
dass der Teil zwischen
<!--- BEGIN newsrow --->
und
<!--- END newsrow --->
so oft mit den richtigen Variablen gefüllt wird, wie es Datensätze in der Datenbank gibt.
Dafür wäre ich euch sehr verbunden :>
Mit freundlichen Grüßen Sodan und danke im Voraus
Kommentar