hossi: MySql Abfrage & Array in Templateengine

Hallo zusammen,

ich steh seit ein paar Wochen total auf dem Schlauch und komme nicht weiter.

Ich habe im Internet eine Templateklasse gefunden mit der man u.a. Arryas im Template darstellen kann.

Jetzt möchte ich das Array mit Daten aus einer Datenbank füllen. Daran scheitere ich. Mein PHP-Template Datei sieht folgendermasen aus:

  
<?php  
include("class.Template.php");  
include("config.php");  
  
$Template = new CTpl();  
  
//jetzt weisen wir einiege Variablen zu:  
  
$Template->titel = "Hallo Welt!";  
$Template->inhalt = array("Willkommen auf meiner Seite!", "Wie geht es dir?", "Mir geht es gut!");  
$Template->zahl = 12345;  
  
//jetzt laden wir das entsprechende Template und lassen es ausgeben  
$Template->display("test.tpl");  
  
//und beenden die Klasseninstanz  
$Template->close();  
?>

Soweit, so gut. Hier ist ein normales Array welches normal auf der Website ausgegeben wird, anbei die test.tpl:

  
<html>  
<head>  
    <title><?=$this->titel?></title>  
</head>  
<body>  
    <?foreach($this->inhalt as $text):?>  
        <?=$text?><br/>  
    <?endforeach;?>  
  
    <?=$this->zahl?>  
</body>  
</html>

Soweit sieht die Seite auch so aus, wie sie sollte.

Nun kommen wir zur Abfrage. Ich habe es bereits mit folgendem Code versucht:

  
Datenbankabfrage Navigation  
$dbabfrage2 = mysql_query("SELECT * FROM navi");  
while($result2 = mysql_fetch_array($dbabfrage2))  
{  
$Template->inhalt = $result2[name_navi];  
}  

Bekomme dann aber folgenden Fehler:
Warning: Invalid argument supplied for foreach() in C:\public\xampp\htdocs\pxcms\2\test.tpl on line 6

In Zeile 6 steht:  <?foreach($this->inhalt as $text):?>

So sieht die Templateklasse aus:

  
<?php  
class CTpl {  
  
    var $data; //Variablensammlung  
    var $isClosed;  
  
  
    function CTpl(){  
        $this->date = array();  
        $this->isClosed = false;  
    }  
  
    function __set($key, $value){  
        if($this->isClosed){  
                throw new Exception('Template already closed.');  
        }  
        $this->data[$key] = $value;  
    }  
  
    function __get($key){  
        if(!isset($this->data[$key])){  
            throw new Exception("$key isn't set!");  
        }  
        return $this->data[$key];  
    }  
  
    function display($template){  
        require($template);  
    }  
  
    function displayV($template){  
        ob_start();  
            require($template);  
            $templateV = ob_get_contents();  
        ob_end_clean();  
  
        return $templateV;  
    }  
  
    function close(){  
        $this->data = "";  
        $this->isClosed = true;  
    }  
}  
?>  

Was läuft da falsch?

Viele Grüße
hossi

  1. Hi!

    Bekomme dann aber folgenden Fehler:
    Warning: Invalid argument supplied for foreach() in C:\public\xampp\htdocs\pxcms\2\test.tpl on line 6

    Und was ist der Inhalt von $Template->inhalt, wenn diese Fehlermeldung erscheint? Was sagt die Kontrollausgabe mit var_dump()? Es sei ein String und kein Array? Das wäre nicht verwunderlich, denn ...

    while($result2 = mysql_fetch_array($dbabfrage2))
    {
    $Template->inhalt = $result2[name_navi];
    }

    ... $result2[name_navi] wird ein String sein und wenn du diesen immer wieder $Template->inhalt zuweist, dann steht da drin die letzte Zuweisung. Du solltest dir (nochmal) die Grundlagen zu Array in PHP zu Gemüte führen, besonders den Teil, wie man ein Array um einzelne Werte erweitert.

    Lo!