Mensen,

Ik ben bezig met het schrijven van een eigen template system, alleen ik heb nu één opstakel waar ik niet uit kom. Nu wil ik een template file in een andere laden, alleen het enige wat hij dan weer geeft is deze tekst:

"templates/default/home.tpl"

Nu is dit mijn simpele parser:

<?
error_reporting(0);
class parser {
var $templatecontent;
var $templatefile;

function parser($file) {
$this->templatefile = $file;
$this->templatecontent = file_get_contents($this->templatefile)or die("Fout: \"$this->templatefile\" kon niet geopend worden!");
}
function assign($block, $content) {
$block = '{' . $block . '}';
$this->templatecontent = str_replace($block, $content, $this->templatecontent);
}
function output() {
echo $this->templatecontent;
}
}
?>

Wat moet ik veranderen of erbij zetten, zodat ik dit op de juiste manier wordt weergegeven?

Alvast bedankt!
Ik heb hem even zo getest:
<?php
error_reporting(E_ALL);
class parser {
var $templatecontent;
var $templatefile;

function parser($file) {
$this->templatefile = $file;
$this->templatecontent = file_get_contents($this->templatefile)or die("Fout: \"$this->templatefile\" kon niet geopend worden!");
}
function assign($block, $content) {
$block = '{' . $block . '}';
$this->templatecontent = str_replace($block, $content, $this->templatecontent);
}
function output() {
echo $this->templatecontent;
}
}

$parser = new parser ('.htaccess');
$parser->output ();
?>
Werkt bij mij prima!
Die wijziging werkt niet met de inhoud van mijn index.php

<?
require_once("includes/config.inc.php");
require_once("includes/classes/class.parser.php");

$parse = new parser($template_dir."index.tpl");

$page = $_GET['p'];

switch ($page) {
case $page:
$inc = $template_dir.''.$page.'.tpl';
break;
default:
$inc = $template_dir.''.$default_page.'.tpl';
break;
}

$parse->assign("template_dir", $template_dir);
$parse->assign("titel", $site_title);
$parse->assign("content", $inc);

$parse->output();
?>
Test eens zo:
<?php
require_once 'includes/config.inc.php';
require_once 'includes/classes/class.parser.php';

$parse = new parser($template_dir."index.tpl");
$parse->output();
?>
Dan is de hele layout weg. althans, plaatjes enzovoorts doen het niet meer. Omdat ik natuurlijk geen waarde heb gegeven aan de Blocks » {titel}

Alles werk prima voor de rest, alleen het laden van een .tpl file in een ander werkt niet. het enige wat ik dan zie in het veld waar ik die file wil laden is dus wat ik al eerder had gepost.

Als ik zo bij andere parsers kijk, dan gebruiken hun iets van een assignInclude tag of iets in die richting. Dat is het gene wat ik nodig heb.

Zou je me daar mee kunnen helpen?
Ik help je toch al? Ik zit nog even naar je code te kijken en dit vind ik wel heel vreemd:

<?php
    switch ($page) {
    case $page: 
?>

Sorry, had het verkeerd begrepen.

ik ging er van uit dat als de waarde van $page (in werkelijkheid $_GET['p']) veranderd, dat ik niet een lijst van al mijn pagina's hoefde te maken.

Dit dus:
<?
require_once("includes/config.inc.php");
require_once("includes/classes/class.parser.php");

$parse = new parser($template_dir."index.tpl");

$page = $_GET['p'];

switch ($page) {
case 'home':
$inc = $template_dir.''.$page.'.tpl';
break;
case 'diensten':
$inc = $template_dir.''.$page.'.tpl';
break;
case 'foto':
$inc = $template_dir.''.$page.'.tpl';
break;
case 'home':
$inc = $template_dir.''.$page.'.tpl';
break;
default:
$inc = $template_dir.''.$default_page.'.tpl';
break;
}

$parse->assign("template_dir", $template_dir);
$parse->assign("titel", $site_title);
$parse->assign("content", $inc);

$parse->output();
?>

Reageren