#phpchina开户#
Smarty siempre ha sido considerado algo redundante. Creo que las personas que piensan que Smarty es redundante son redundantes... No hablemos más de esto. Hoy te enseñaré cómo escribir un motor de plantillas para que todos puedan escribir su propio motor de plantillas. Después de leer este artículo, tu comprensión de Smarty será mejor. Mi motor de plantillas se llama Stupid (que significa "estúpido"), ¡no me gustan las cosas que son demasiado inteligentes!
El motor de plantillas Stupid se compone de 3 archivos, que son: estúpido.class.php, estúpido_parser.class.php, estúpido_debugger.class.php.
La tarea de Stupid.class.php es establecer variables, rutas de plantilla y funciones de visualización, mientras que Stupid_parser.class.php se usa para compilar archivos de plantilla y Stupid_debugger.class.php se usa para depurar.
Bien, escribamos estúpido.class.php ahora.
1. Cree un nuevo archivo PHP llamado: estúpido.class.php.
Nuestra clase se llama Estúpida. Primero diseñemos las variables miembro.
Las variables miembro incluyen: $_tpl_vars, $_tpl_file, $_parser, $_debugger;
$_tpl_vars: usado para guardar variables de plantilla;
$_tpl_file: utilizado para guardar el nombre del archivo de plantilla;
$_parser: El que guarda el objeto StupidParser es el objeto compilado;
$_debugger: Lo que guarda el objeto StupidDebug es el objeto de depuración
que se define a continuación, que se utilizan para almacenar la carpeta de plantilla y la carpeta de compilación:
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');Comenzar
a codificar >>>
<?php
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
clase Estúpido {
privado $_tpl_vars;
privado $_tpl_file;
privado $_parser;
privado $_depurador;
}
?>
Comience a escribir un constructor >>>
public function Stupid() {
si(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Error: configure la carpeta de plantilla y la carpeta de compilación correctamente');
}
}
En el constructor, determinamos si la ruta de la plantilla y la ruta de compilación están configuradas correctamente.
Diseñamos nuestros métodos. Nuestra clase tiene principalmente los siguientes métodos:
asignar(), set_tpl_dir(), set_parsed_dir(), mostrar(), depurar().
método asignar():
El propósito de asignar() es establecer variables de plantilla. El código es el siguiente >>>
función pública asignar($var, $valor) {.
si(isset($var) && recortar($var) != '') {
$this->_tpl_vars[$var] = $valor;
devolver verdadero;
} demás {
exit('Error: establezca el nombre de la variable');
}
}
Primero determinamos si el usuario ha configurado el nombre de la variable, usamos isset($var) && trim($var) != '' para determinar, trim($var) != '' evita que el usuario configure el nombre de la variable con espacios Si está configurada, si la variable es correcta, la guardaremos en el
método display()
de la variable miembro.
El método display() es el método más importante en la clase Stupid. Se utiliza para mostrar y detectar si la plantilla se ha actualizado. Si se actualiza, se compilará nuevamente. Si no se actualiza, el archivo compilado original. se utilizará
el código es el siguiente >>>
visualización de función pública ($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('Error: el archivo de plantilla no existe');
}
$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 = nuevo StupidParser();
$this->_parser->compile($tpl_file);
}
incluir $parsed_file;
}
Este método se basa en la declaración !file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file) para determinar si se ha compilado y si el archivo de plantilla se ha actualizado si no se ha compilado o. el archivo de plantilla se ha actualizado y debe volver a compilarse. Introduciremos stupid_parser.class.php, crearemos un objeto StupidParser y compilaremos el archivo de plantilla. Después de la compilación, presentaremos el archivo de plantilla compilado.
es unmétodo de depuración()
de archivo PHP normal.
El método Debugg () es relativamente simple, que consiste en introducir el archivo Stupid_debugger.class.php, crear un objeto StupidDebuger y llamar al método de inicio de StupidDebuger para la depuración.
El código es el siguiente >>>
depuración de función pública ($tpl_file). ) {
si (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger(TPL_DIR. $tpl_file);
$this->_debugger->start();
} demás {
exit('Error: el archivo de clase del depurador no existe');
}
} ¡
En este punto, nuestra clase Stupid está terminada! La próxima vez presentaré la escritura de la clase StupidParser. Si tiene algún comentario o sugerencia, puede presentar
la fase completa:
<?php.
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
clase estúpida {
privado $_tpl_vars;
privado $_tpl_file;
privado $_parser;
privado $_debug;
función pública Estúpido() {
si(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Error: configure la carpeta de plantilla y la carpeta de compilación correctamente');
}
}
función pública asignar($var, $valor) {
si(isset($var) && recortar($var) != '') {
$this->_tpl_vars[$var] = $valor;
devolver verdadero;
} demás {
exit('Error: establezca el nombre de la variable');
}
}
visualización de función pública ($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('Error: el archivo de plantilla no existe');
}
$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 = nuevo StupidParser();
$this->_parser->compile($tpl_file);
}
incluir $parsed_file;
}
función de depuración ($tpl_file) {
si (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger($this->_template_dir . $tpl_file);
$this->_debugger->start();
} demás {
exit('Error: el archivo de clase del depurador no existe');
}
}
}
?>