PARSER.class.php

<?php

error_reporting(E_ALL);

// PARSER.class.php
// Gemaakt door: Mebus Van Gorkum
// Script is getest met usbwebserver, PHP versie 5 maar script zou ook makkelijk moeten werken op php 4
// Versie 1

class PARSER {

	var $ext	= FALSE;		// Hoeft nu geen extensie achter template bestand gezet te worden
	var $extension	= '.TPL';		// Moet ingevult worden wanneer $ext op FALSE staat
	var $place	= 'templates/';		// Plek waar de template's zich bevinden
	var $template	= array();
	var $part	= array();
	var $parts	= array();
	var $parsed	= array();
	var $times	= array();

	function gettemp($file, $naam = NULL, $weg = NULL) { // Template bestand ophalen

		if(empty($weg)) {

			if($this->ext) {

				$path = $this->place.$file;

			} else {

				$path = $this->place.$file.$this->extension;

			}

		} else {


			if($this->ext) {

				$path = $this->place.$weg.'/'.$file;

			} else {

				$path = $this->place.$weg.'/'.$file.$this->extension;

			}

		}

		if(file_exists($path)) {


			$fp = fopen($path,'r');



			if(empty($naam)) {

				while(!feof($fp)){

					@$this->template[$file]['content'] .= fgets($fp,4096);

				}

			} else {

				while(!feof($fp)){

					@$this->template[$naam]['content'] .= fgets($fp,4096);

				}

			}

		fclose($fp);

		}

	}

	function fuse($fuse, $naam) { // Twee verschillende template's met elkaar samen laten smelten

		if(!empty($fuse) && !empty($naam)) {

			$this->template[$naam]['content'] = str_replace('{FUSE:'.$fuse.'}', $this->templates[$fuse]['content'], $this->template[$naam]['content']);

		}

	}

	function getpart($naam, $sub) { // Stukje pakken wat herhaalt moet worden

		preg_match('/\{SUB:'.$sub.'\}(.*?)\{\/SUB:'.$sub.'\}/si', $this->template[$naam]['content'], $matches);

		$this->part[$naam][$sub]['content'] = $matches[0];

	}

	function parse($naam, $variable, $value, $sub = NULL) { // Alle waarden parsen

		if(!empty($sub)) {

			$stukjesvar = explode('+=+', $variable);
			$stukjesval = explode('+=+', $value);

			$countvar = count($stukjesvar);
			$countval = count($stukjesval);

			if($countvar == $countval) {

				if(empty($this->times[$naam][$sub]['times'])) {

					$this->times[$naam][$sub]['times'] = 1;

				} else {

					$this->times[$naam][$sub]['times'] = $this->times[$naam][$sub]['times'] + 1;

				}

				for($i = 0; $i <= $countval - 1; $i++) {

					if($i == 0) {

						$this->parts[$naam][$sub][$this->times[$naam][$sub]['times']]['content'] = str_replace('{'.$sub.':'.$stukjesvar[$i].'}', $stukjesval[$i], $this->part[$naam][$sub]['content']);

					} else {

						$this->parts[$naam][$sub][$this->times[$naam][$sub]['times']]['content'] = str_replace('{'.$sub.':'.$stukjesvar[$i].'}', $stukjesval[$i], $this->parts[$naam][$sub][$this->times[$naam][$sub]['times']]['content']);

					}

				}

			}

		} else {

			$this->template[$naam]['content'] = str_replace('{'.$variable.'}', $value, $this->template[$naam]['content']);

		}

	}

	function sub($naam, $sub) { // Restanten weghalen

		if(!empty($this->times[$naam][$sub]['times'])) {

			if($this->times[$naam][$sub]['times'] == 1) {

				$this->parsed[$naam][$sub]['content'] = $this->parts[$naam][$sub][$this->times[$naam][$sub]['times']]['content'];

			} else {

				for($i = 1; $i < $this->times[$naam][$sub]['times']; $i++) {

					$this->parsed[$naam][$sub]['content'] = $this->parts[$naam][$sub][$i]['content'].$this->parts[$naam][$sub][$i + 1]['content'];

				}

			}

			$this->parsed[$naam][$sub]['content'] = str_replace('{SUB:'.$sub.'}', '', $this->parsed[$naam][$sub]['content']);
			$this->parsed[$naam][$sub]['content'] = str_replace('{/SUB:'.$sub.'}', '', $this->parsed[$naam][$sub]['content']);
			$this->template[$naam]['content'] = str_replace($this->part[$naam][$sub]['content'], $this->parsed[$naam][$sub]['content'], $this->template[$naam]['content']);

		}

	}

	function display($naam) { // Geparste template tonen

	  echo $this->template[$naam]['content'];

	}

}

?>