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 // // {country.ID} => {country.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 = ''; $startTag = htmlentities($startTag); $endTag = ''; $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 -----> // $secondPart = -----> 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; } } ?>