<?php
class templateParser {
/* @desc In deze variabele wordt de hele file tijdelijk opgeslagen */
public $code;
/* @desc In deze variabele wordt alle data opgeslagen die te maken heeft met het vervangen van html
Blocks:
$_replacedata['block']['<naamvanblock>']['contentblock']; Hierin wordt opgeslagen wat tussen de [begin-block: <naamvanblock>] en [end-block: <naamvanblock>] staat.
$_replacedata['block']['<naamvanblock>'][<oplopend nummer>]['var']; hierin wordt de data opgeslagen.
Files:
$_replacedata['include'][] = <naamvanbestand>; hierin wordt de naam van de bestanden opgeslagen.
Vars:
$_replacedata['var']['<varnaam>']; Hierin worden de vars opgeslagen
*/
public $_replacedata;
/**
* @desc Deze functie laad de template in.
* @param string De link naar de template.
**/
public function loadTemplate($tFile) {
} else {
echo 'Couldn\'t load the template
file.'; }
}
/*
* @desc Met deze functie kun je blocks toevoegen.
* @param string De naam van het block
* @param array De data die erin geplaatst moet worden
* Structuur:
* array(
* array('var' => 'waarde', 'anderevar' => 'waardes'),
* array('var' => 'iets', 'anderevar' => 'ook iets')
* );
**/
public function assignBlock($blockname,$array_met_values) {
$block_content = $this->getContentInBlock($blockname);
$this->_replacedata['block'][$blockname] = $array_met_values;
$this->_replacedata['block'][$blockname]['contentblock'] = $block_content;
}
/**
* @desc Met deze functie kun je één enkele replacement toevoegen
* @param string De tekst in de content
* @param string Waarmee het vervangen moet worden
**/
public function assignVar($var,$value) {
$this->_replacedata['var'][$var] = $value;
}
/**
* @desc Met deze functie kun je meerdere replacements toevoegen dmv een array mee te geven
* @param array een array met vars
* @param array een array met replacements
**/
public function assignVars($vars,$replacements) {
if(!is_array($vars) || !is_array($replacements)) {
$this->assignVar($vars,$replacements);
} else {
for($i=0; $i < count($vars); $i++) {
$this->_replacedata['var'][$vars[$i]] = $replacements[$i];
}
}
}
/**
* @desc Met deze functie kun je een include toevoegen
* @param string het bestand dat je wilt includen
**/
public function assignIncludeContent($filename) {
if(file_exists($filename)) {
$this->_replacedata['include'][] = $filename;
}
}
/**
* @desc Met deze functie parse je de content
* @param boolean moet de content gelijk worden ge-echod of niet
* @return string optioneel: de content teruggeven
**/
public function parse($display = FALSE) {
$code = unserialize($this->code);
//de blocks verwerken
if(is_array($this->_replacedata['block'])) {
foreach($this->_replacedata['block'] as $blockname => $values) {
$contentblock = $values['contentblock'];
$block_output = '';
for($i = 0; $i < (count($values) - 1);$i++) {
$rij = $contentblock;
foreach($values[$i] as $var => $replacement) {
$rij = str_replace('{'.$var.'}',$replacement,$rij);
}
$block_output .= $rij;
}
$code = $this->replaceBlock($blockname,$block_output,$code);
}
}
//de vars verwerken
if(is_array($this->_replacedata['var'])) {
foreach($this->_replacedata['var'] as $key => $value) {
$code = str_replace('{'.$key.'}',$value,$code);
}
}
if(is_array($this->_replacedata['include'])) {
foreach($this->_replacedata['include'] as $file) {
$contents_file = file_get_contents($file);
$regex = "(\[file: ".$file."\])";
$code = ereg_replace($regex,$contents_file,$code);
}
}
if($display) {
echo $code;
} else {
return $code;
}
}
/**
* @desc Deze functie haalt de content tussen de [begin-block: ][end-block: ] vandaan
* @param string Naam van het block
* @return string De content uit het block
**/
public function getContentInBlock($blockname) {
$regex = "(.*)(\[begin-block: ".$blockname."\])(.*)(\[end-block: ".$blockname."\])(.*)";
return ereg_replace($regex,"\\3",unserialize($this->code));
}
/**
* @desc Deze functie vervangt de het block door de content die erin moet
* @param string de naam van het block
* @param string de content die erin moet
* @param string de hele content waarin het vervangen moet worden
* @return string de nieuwe content
**/
public function replaceBlock($blockname,$output,$code) {
$regex = "(\[begin-block: ".$blockname."\])(.*)(\[end-block: ".$blockname."\])";
return ereg_replace($regex,$output,$code);
}
/**
* @desc Deze functie roept de __destruct functie aan
**/
public function clearSettings() {
$this->__destruct();
}
/**
* @desc Deze functie maakt de variabelen leeg
**/
public function __destruct() {
$this->_replacedata = '';
$this->code = '';
}
}
?>