Hallo zusammen..
Ich habe mal bisschen OOP gelern und meiner 1. kleiner Parser geschrieben. Beim Testen hab ich jedoch ein Fehler Festgestellt.
Wie ihr hier sehen könnt:
http://andys-tools.ch/cms/admin/index.php?page=12
-> Der Error wird nach dem Header und vor dem body ausgegeben, wie ihr dem Quellcode entnehmen könnt.
Ich habe sehr lange gesucht woran das es liegt, biss ich jetzt eignedlich weiss was genau passiert aber nicht wiso, darum konnte ich den fehler aucxh noch nicht beheben.
Das sind eigendlich die drei funktionen die ich verwende.
Auf der Index.php parse ich nun das Hauptdesign.
da wird ist ein include, der die jeweilige seite includiert, je nach $_GET übergabe.
Jede dieser Seite ist ca. folgend aufgebaut:
Der Fehler entsteht nun in der index.php
Jetzt wird der Content das erste mal direkt beim include der page.php ausgegeben, das 2. mal am richtigen ort: $Pars->add('content', $Pars->getContent());
Frage:
Wiso wird der Content schon beim include ausgegeben, wenn ich gar nirgens (ob klasse oder code) ein echo oder ein print hab?
Ich habe mal bisschen OOP gelern und meiner 1. kleiner Parser geschrieben. Beim Testen hab ich jedoch ein Fehler Festgestellt.
Wie ihr hier sehen könnt:
http://andys-tools.ch/cms/admin/index.php?page=12
-> Der Error wird nach dem Header und vor dem body ausgegeben, wie ihr dem Quellcode entnehmen könnt.
Ich habe sehr lange gesucht woran das es liegt, biss ich jetzt eignedlich weiss was genau passiert aber nicht wiso, darum konnte ich den fehler aucxh noch nicht beheben.
PHP-Code:
class Parser
{
// ...
// Platzhalter zufügen
function add($ph, $es)
{
// Platzhalten zufügen
$this->arr[$ph] = $es;
}
// ...
// Content Parsen
function tpl($tpl)
{
// tpl holen
$tpl = file_get_contents($tpl);
// prüfen ob normales add oder add_array
if(count($this->arr) > 0) {
// add -> arr
// Platzhalter ersetzen
foreach ($this->arr as $ph => $es)
{
// Platzhalter ersetzen
$tpl = str_replace('{'.$ph.'}', $es, $tpl);
}
} elseif(count($this->while) > 0) {
// add_array -> while
// inhalt zwischen {while} und {/while} suchen
$dat = split('{while}', $tpl);
$dat = split('{/while}', $dat[1]);
$dat[0] = $tpl;
// Platzhalter ersetzen
foreach ($this->while as $ph => $es)
{
// Platzhalter ersetzen
$tpl = str_replace('{'.$ph.'}', $es, $tpl);
}
} else {
// Platzhalter ersetzen
foreach ($this->arr as $ph => $es)
{
// Platzhalter ersetzen
$tpl = str_replace('{'.$ph.'}', $es, $tpl);
}
}
//..
// Content Template
function getContent()
{
return $this->content;
}
}
Auf der Index.php parse ich nun das Hauptdesign.
da wird ist ein include, der die jeweilige seite includiert, je nach $_GET übergabe.
Jede dieser Seite ist ca. folgend aufgebaut:
PHP-Code:
// ...
$Pars->add('platzhalter1', $ph1);
$Pars->add('platzhalter2', $ph2);
$Pars->tpl('template.tpl')
//..
PHP-Code:
//prüfen ob $_get[page] übergeben wurde
if(isset($_GET['page'])) {
include('page.php');
$Pars->add('content', $Pars->getContent());
$Pars->setTitel('Admin Panel :: Startseite');
} else {
// content Startseite
$Pars->add('content', 'Admin Panel Startseite');
$Pars->setTitel('Admin Panel :: Startseite');
}
$Pars->tpl('../templates/admin/index_body.tpl');
Frage:
Wiso wird der Content schon beim include ausgegeben, wenn ich gar nirgens (ob klasse oder code) ein echo oder ein print hab?
Kommentar