All pastes #526658 Raw Edit

Unnamed

public php v1 · immutable
#526658 ·published 2007-05-31 22:01 UTC
rendered paste body
<?phpclass template{function __construct($file) {	// Teste si le fichier existe et si il est autorisé en lecture	if(empty($file) or !file_exists($file) or !is_readable($file)) {		// Si le fichier est inexistant pas : erreur		die('Template error : file '.$file.' not found.');	} else {		// Ouverture du fichier		$handle = fopen($file, 'rb');           		// Enregistrement du fichier dans $this->page		$this->page = fread($handle, filesize ($file));            		// Fermeture du fichier		fclose ($handle);	}}function simpleVar($varArray = array()) {	// Si le tableau est vide, on stoppe le script	if (empty($varArray)) exit;	// Parcours du tableau	foreach ($varArray as $var => $data) {		// Enregistrement dans le tableau $this->infoTpl		$this->infoTpl['.'][][$var] = $data;	}}function loopVar($type, $varArray = array()) {	// Si le tableau est vide, on stoppe le script	if (empty($varArray)) exit;        	// Calcule le nombre de lignes dans le type courant	// Si 0 ligne    => 0	// Si X lignes    => X	// Pourquoi X et non (X + 1) ?	// -> Car on comtpe à partir de 0 donc X retourne toujours	//      le dernier id + 1	$lastID = (count($this->infoTpl[$type]) != 0) ? (count($this->infoTpl[$type])) : 0;        	foreach ($varArray as $constant => $data) {		$this->infoTpl[$type][$lastID][$constant] = $data;	}}function constantReplace() {	// Parcours de tout le taleau $this->infoTpl	foreach($this->infoTpl as $type => $info) {		// Si le type est '.' càd		// provient de la fonction simpleVar()		// ou encore de constantes places hors-boucle		if ($type == '.') {			for ($i = 0, $imax = count($info); $i < $imax; $i++) {				foreach ($info[$i] as $constant => $data) {					// Remplace {CONSTANTE} par les donneés correspondantes					// et mets  jour le code HTML du fichier test.tpl					// stock dans $this->page					$data = (file_exists($data)) ? $this->includeFile($data) : $data;					$this->page = preg_replace('`{'.$constant.'}`', $data, $this->page);				}			}		// Sinon si le type est autre càd		// provient de la fonction loopVar()		// ou encore de constantes places dans une boucle		} else {			// Calcule la taille du tableau $info			$infoSize = count($info);						// Variable qui contiendra le code à la place de			//  <!-- BEGIN country -->			//  {country.ID} => {country.COUNTRY}			// <!-- END country -->			$block = '';						// Parcourt le tableau $info			for ($i = 0; $i < $infoSize; $i++) {				// Encode les caractres spéciaux				$page = htmlentities($this->page);								// $page est une variable string				// Remplit le tableau $infoArray ligne par ligne				$infoArray = explode("\n", $page);								// Suppression des espaces blancs avant/après				// dus aux indentations du code				for ($k = 0, $kmax = count($infoArray); $k < $kmax; $k++) {					$infoArray[$k] = trim($infoArray[$k]);				}    								// Récupration et formatage des tags				$startTag = '<!-- BEGIN '.$type.' -->';				$startTag = htmlentities($startTag);									$endTag = '<!-- END '.$type.' -->';				$endTag = htmlentities($endTag);								// Récupration de la clé des tags dans le tableau $infoArray				$startTag = (array_search($startTag, $infoArray)) + 1;				$endTag = (array_search($endTag, $infoArray)) - 1;				// Nombre de lignes entre les tags				$lengthTag = ($endTag - $startTag) + 1;								// Récupration de la portion du tableau				// délimite par les tags (tags non compris)				$blockTag = array_slice($infoArray, $startTag, $lengthTag);								// Remise en type 'string' et non plus 'array'				// Facilitera le remplacement des constantes par leurs donneés				$blockTag = implode("\n", $blockTag);									// Remplacement des constantes par leur données				foreach($info[$i] as $constant => $data) {					$data = (file_exists($data)) ? $this->includeFile($data) : $data;;					$blockTag = preg_replace('`{'.$type.'.'.$constant.'}`', $data, $blockTag);				}								// Ajout des données à la variable block globale pour la boucle				// Ajoute \n ou pas et ajoute les données				// de la nouvelle boucle à la suite de $block				$block = ($block == '') ? $blockTag : $block."\n".$blockTag;			}						// Mise en tableau de $block			// Facilitera l'opération de reconstitution des tableaux			$block = explode ("\n", $block);						// Coupe du tableau en 2			// $fisrtPart = début du tableau   ----->    <!-- BEGIN country -->			// $secondPart = <!-- BEGIN country -->    ----->    fin du tableau			$firstPart = array_slice($infoArray, 0, $startTag - 1);			$secondPart = array_slice($infoArray, $startTag + $lengthTag + 1);						// Reconstitution du code source			// en insrant au milieu les donnes			$page = array_merge($firstPart, $block, $secondPart);						// Décode les balises HTML qui étaient encodées avec htmlentities()			for ($i = 0, $imax = count($page); $i < $imax; $i++) {				$page[$i] = html_entity_decode($page[$i]);			}						// Mets  jour le code HTML du fichier test.tpl			// stock dans $this->page			$this->page = implode("\n", $page);		}	}}function parse() {	$this->constantReplace();        	echo $this->page;}}?>