Subversion Repositories Applications.framework

Rev

Rev 467 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 467 Rev 476
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe SquelettePhp, traitant les squelette Php utilisant la syntaxe courte php ou pas.
4
 * Classe SquelettePhp, traitant les squelette Php utilisant la syntaxe courte php ou pas.
5
 * Ces méthodes sont statiques.
5
 * Ces méthodes sont statiques.
6
 *
6
 *
7
 * @category	php5
7
 * @category	PHP 5.2
8
 * @package		Framework
8
 * @package		Framework
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @copyright	2010 Tela-Botanica
10
 * @copyright	Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
11
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
-
 
12
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
11
 * @license		GNU-GPL-v3 <http://www.gnu.org/licenses/gpl.html>
13
 * @version		SVN: $$Id: SquelettePhp.php 153 2010-03-04 10:48:32Z jpm $$
12
 * @license		CECILL-v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
14
 * @link		/doc/framework/
-
 
15
 */
13
 */
16
class SquelettePhp {
14
class SquelettePhp {
17
	
15
 
18
	/**
16
	/**
19
	 * Fonction prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
17
	 * Fonction prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
20
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
18
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
21
	 *
19
	 *
22
	 * @param String $fichier	le chemin du fichier du squelette
20
	 * @param String $fichier	le chemin du fichier du squelette
23
	 * @param Array  $donnees	un tableau associatif contenant les variables a injecter dans le squelette.
21
	 * @param Array  $donnees	un tableau associatif contenant les variables a injecter dans le squelette.
24
	 *
22
	 *
25
	 * @return boolean false si la vue n'existe pas, sinon la chaine résultat.
23
	 * @return boolean false si la vue n'existe pas, sinon la chaine résultat.
26
	 */
24
	 */
27
	public static function analyser($fichier, Array $donnees = array()) {
25
	public static function analyser($fichier, Array $donnees = array()) {
28
		$sortie = false;
26
		$sortie = false;
29
		if (file_exists($fichier)) {
27
		if (file_exists($fichier)) {
30
			// Extraction des variables du tableau de données
28
			// Extraction des variables du tableau de données
31
			extract($donnees);
29
			extract($donnees);
32
			// Démarage de la bufferisation de sortie
30
			// Démarage de la bufferisation de sortie
33
			ob_start();
31
			ob_start();
34
			// Si les tags courts sont activés
32
			// Si les tags courts sont activés
35
			if ((bool) @ini_get('short_open_tag') === true) {
33
			if ((bool) @ini_get('short_open_tag') === true) {
36
				// Simple inclusion du squelette
34
				// Simple inclusion du squelette
37
				include $fichier;
35
				include $fichier;
38
			} else {
36
			} else {
39
				// Sinon, remplacement des tags courts par la syntaxe classique avec echo
37
				// Sinon, remplacement des tags courts par la syntaxe classique avec echo
40
				$html_et_code_php = self::traiterTagsCourts($fichier);
38
				$html_et_code_php = self::traiterTagsCourts($fichier);
41
				// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
39
				// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
42
				$html_et_code_php = '?>'.$html_et_code_php;
40
				$html_et_code_php = '?>'.$html_et_code_php;
43
				// Interprétation du html et du php dans le buffer
41
				// Interprétation du html et du php dans le buffer
44
				echo eval($html_et_code_php);
42
				echo eval($html_et_code_php);
45
			}
43
			}
46
			// Récupèration du contenu du buffer
44
			// Récupèration du contenu du buffer
47
			$sortie = ob_get_contents();
45
			$sortie = ob_get_contents();
48
			// Suppression du buffer
46
			// Suppression du buffer
49
			@ob_end_clean();
47
			@ob_end_clean();
50
		} else {
48
		} else {
51
			$msg = "Le fichier du squelette '$fichier' n'existe pas.";
49
			$msg = "Le fichier du squelette '$fichier' n'existe pas.";
52
			trigger_error($msg, E_USER_WARNING);
50
			trigger_error($msg, E_USER_WARNING);
53
		}
51
		}
54
		// Retourne le contenu
52
		// Retourne le contenu
55
		return $sortie;
53
		return $sortie;
56
	}
54
	}
57
	
55
 
58
	/**
56
	/**
59
	 * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
57
	 * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
60
	 *
58
	 *
61
	 * @param String $chemin_squelette le chemin du fichier du squelette
59
	 * @param String $chemin_squelette le chemin du fichier du squelette
62
	 *
60
	 *
63
	 * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
61
	 * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
64
	 */
62
	 */
65
	private static function traiterTagsCourts($chemin_squelette) {
63
	private static function traiterTagsCourts($chemin_squelette) {
66
		$contenu = file_get_contents($chemin_squelette);
64
		$contenu = file_get_contents($chemin_squelette);
67
		// Remplacement de tags courts par un tag long avec echo
65
		// Remplacement de tags courts par un tag long avec echo
68
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
66
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
69
		// Ajout systématique d'un point virgule avant la fermeture php
67
		// Ajout systématique d'un point virgule avant la fermeture php
70
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
68
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
71
		return $contenu;
69
		return $contenu;
72
	}
70
	}
73
}
71
}
74
?>
72
?>