#phpchina开户#
Smarty a toujours été considéré comme une chose redondante. Je pense que les gens qui pensent que Smarty est redondant sont redondants.... N'en parlons plus. Aujourd'hui, je vais vous apprendre à écrire un moteur de modèles afin que chacun puisse écrire son propre moteur de modèles. Après avoir lu cet article, votre compréhension de Smarty sera meilleure. Mon moteur de template s'appelle Stupid (qui signifie "stupide"), je n'aime pas les choses trop intelligentes !
Le moteur de template Stupid est composé de 3 fichiers, ils sont : stupid.class.php, stupid_parser.class.php, stupid_debugger.class.php.
La tâche de Stupid.class.php est de définir les variables, les chemins de modèles et les fonctions d'affichage, tandis que Stupid_parser.class.php est utilisé pour compiler les fichiers modèles et Stupid_debugger.class.php est utilisé pour le débogage.
D'accord, écrivons stupid.class.php maintenant.
1. Créez un nouveau fichier PHP nommé : stupid.class.php.
Notre classe s'appelle Stupid. Commençons par concevoir les variables membres.
Les variables membres incluent : $_tpl_vars, $_tpl_file, $_parser, $_debugger ;
$_tpl_vars : utilisé pour enregistrer les variables du modèle ;
$_tpl_file : utilisé pour enregistrer le nom du fichier modèle ;
$_parser : Celui qui enregistre l'objet StupidParser est l'objet compilé ;
$_debugger : ce qui sauvegarde l'objet StupidDebug, c'est l'objet de débogage ;
deux constantes sont définies ci-dessous, qui sont utilisées pour stocker le dossier de modèle et le dossier de compilation :
définir('TPL_DIR', './templates/');
définir('TPL_C_DIR', './templates_c/');Commencer
à coder>>>
<?php
définir('TPL_DIR', './templates/');
définir('TPL_C_DIR', './templates_c/');
classe Stupide {
privé $_tpl_vars ;
fichier_tpl_$ privé ;
$_parser privé ;
privé $_debugger ;
}
?>
Commencez à écrire un constructeur>>>
public function Stupid() {
si(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Erreur : Veuillez définir correctement le dossier de modèles et le dossier de compilation');
}
}
Dans le constructeur, nous déterminons si le chemin du modèle et le chemin de compilation sont correctement définis.
Concevons nos méthodes. Notre classe a principalement les méthodes suivantes :
assign(), set_tpl_dir(), set_parsed_dir(), display(), debug().
Méthode assign() :
Le but de assign() est de définir des variables de modèle. Le code est le suivant >>>
public function assign($var, $value) {
if(isset($var) && trim($var) != '') {
$this->_tpl_vars[$var] = $valeur ;
renvoie vrai ;
} autre {
exit('Erreur : veuillez définir le nom de la variable');
}
}
Nous déterminons d'abord si l'utilisateur a défini le nom de la variable, utilisons isset($var) && trim($var) != '' pour déterminer, trim($var) != '' empêche l'utilisateur de définir le nom de la variable avec des espaces .Si défini Si la variable est correcte, nous la sauvegarderons dans la
méthode _tpl_vars display()
de la variable membre.
La méthode display() est la méthode la plus importante de la classe Stupid. Elle est utilisée pour afficher et détecter si le modèle a été mis à jour, s'il n'est pas mis à jour, le fichier compilé d'origine. sera utilisé.
Le code est le suivant >>>
public function display( $tpl_file) {
$template_file = TPL_DIR.$tpl_file;
si(!file_exists($template_file)) {
exit('Erreur : le fichier modèle n'existe pas');
}
$parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
require_once './stupid_parser.class.php';
$this->_parser = new StupidParser();
$this->_parser->compile($tpl_file);
}
inclure $parsed_file ;
}
Cette méthode est basée sur l'instruction !file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file) pour déterminer s'il a été compilé et si le fichier modèle a été mis à jour s'il n'a pas été compilé ou. le fichier modèle a été mis à jour, il doit être recompilé. Nous allons introduire stupid_parser.class.php, créer un objet StupidParser et compiler le fichier modèle. Après la compilation, nous présenterons le fichier modèle compilé.
est uneméthode
de fichier PHP ordinaire.
La méthode Debugg() est relativement simple, elle consiste à introduire le fichier stupid_debugger.class.php, à créer un objet StupidDebuger et à appeler la méthode de démarrage de StupidDebuger pour le débogage.
Le code est le suivant >>>
public function debug ($tpl_file). ) {
if (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger(TPL_DIR. $tpl_file);
$this->_debugger->start();
} autre {
exit('Erreur : le fichier de classe du débogueur n'existe pas');
}
}
À ce stade, notre classe Stupid est terminée ! La prochaine fois, je présenterai l'écriture de la classe StupidParser. Veuillez continuer à soutenir. Si vous avez des commentaires ou des suggestions, vous pouvez proposer
show show full phase :
<?php.
définir('TPL_DIR', './templates/');
définir('TPL_C_DIR', './templates_c/');
classe stupide {
privé $_tpl_vars ;
fichier_tpl_$ privé ;
$_parser privé ;
privé $_debug ;
fonction publique Stupide() {
si(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Erreur : Veuillez définir correctement le dossier de modèles et le dossier de compilation');
}
}
fonction publique assign($var, $value) {
if(isset($var) && trim($var) != '') {
$this->_tpl_vars[$var] = $valeur ;
renvoie vrai ;
} autre {
exit('Erreur : veuillez définir le nom de la variable');
}
}
affichage de la fonction publique ($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
si(!file_exists($template_file)) {
exit('Erreur : le fichier modèle n'existe pas');
}
$parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
require_once './stupid_parser.class.php';
$this->_parser = new StupidParser();
$this->_parser->compile($tpl_file);
}
inclure $parsed_file ;
}
fonction debug ($tpl_file) {
if (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger($this->_template_dir . $tpl_file);
$this->_debugger->start();
} autre {
exit('Erreur : le fichier de classe du débogueur n'existe pas');
}
}
}
?>