#phpchina开户#
Smarty sempre foi considerado uma coisa redundante. Acho que as pessoas que pensam que Smarty é redundante são redundantes.... Não vamos mais falar sobre isso. Hoje vou te ensinar como escrever um mecanismo de modelo para que todos possam escrever seu próprio mecanismo de modelo. Depois de ler este artigo, sua compreensão do Smarty será melhor. Meu mecanismo de template se chama Stupid (que significa "estúpido"), não gosto de coisas muito inteligentes!
O mecanismo de template Stupid é composto por 3 arquivos, são eles: estúpido.class.php, estúpido_parser.class.php, estúpido_debugger.class.php.
A tarefa de Stupid.class.php é definir variáveis, caminhos de modelo e funções de exibição, enquanto Stupid_parser.class.php é usado para compilar arquivos de modelo e Stupid_debugger.class.php é usado para depuração.
Ok, vamos escrever estúpido.class.php agora.
1. Crie um novo arquivo PHP chamado: estúpido.class.php.
Nossa classe é chamada Stupid. Vamos projetar as variáveis-membro primeiro.
As variáveis de membro incluem: $_tpl_vars, $_tpl_file, $_parser, $_debugger;
$_tpl_vars: usado para salvar variáveis de template;
$_tpl_file: usado para salvar o nome do arquivo do modelo;
$_parser: Aquele que salva o objeto StupidParser é o objeto compilado;
$_debugger: O que salva o objeto StupidDebug é o objeto de depuração
definido abaixo, que são usadas para armazenar a pasta de templates e a pasta de compilação:
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');Iniciar
codificação>>>
<?php
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
classe Estúpido {
privado $_tpl_vars;
privado $_tpl_file;
privado $_parser;
privado $_depurador;
}
?>
Comece a escrever um construtor >>>
public function Stupid() {
if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Erro: Defina a pasta de modelo e a pasta de compilação corretamente');
}
}
No construtor, determinamos se o caminho do modelo e o caminho de compilação estão definidos corretamente.
Nossa classe possui principalmente os seguintes métodos:
atribuir(), set_tpl_dir(), set_parsed_dir(), display(), debug().
método atribuir():
O objetivo de atribuir() é definir variáveis de modelo. O código é o seguinte >>>
public function atribuir($var, $value) {.
if(isset($var) && trim($var) != '') {
$this->_tpl_vars[$var] = $valor;
retornar verdadeiro;
} outro {
exit('Erro: Por favor, defina o nome da variável');
}
}
Primeiro determinamos se o usuário definiu o nome da variável, usamos isset($var) && trim($var) != '' para determinar, trim($var) != '' evita que o usuário defina o nome da variável com espaços . Se definido Se a variável estiver correta, iremos salvá-la na variável de membro _tpl_vars
método display()
.
O método display() é o método mais importante da classe Stupid. Ele é usado para exibir e detectar se o modelo foi atualizado. Se não for atualizado, o arquivo original compilado. será usado.
O código é o seguinte >>>
public function display( $tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('Erro: arquivo de modelo não 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 = new StupidParser();
$this->_parser->compile($tpl_file);
}
inclua $parsed_file;
}
Este método é baseado na instrução !file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file) para determinar se foi compilado e se o arquivo de modelo foi atualizado ou se não foi compilado. o arquivo de modelo foi atualizado, ele deve ser recompilado. Apresentaremos stupid_parser.class.php, criaremos um objeto StupidParser e compilaremos o arquivo de modelo. Após a compilação, apresentaremos o arquivo de modelo compilado.
é ummétodo debug()
comum do arquivo PHP.
O método Debugg() é relativamente simples, que consiste em introduzir o arquivo stupid_debugger.class.php, criar um objeto StupidDebuger e chamar o método start de StupidDebuger para depuração.
O código é o seguinte >>>
depuração de função pública ($tpl_file. ) {
if (include_once("estúpido_debugger.class.php")) {
$this->_debugger = new StupidDebugger(TPL_DIR. $tpl_file);
$this->_debugger->start();
} outro {
exit('Erro: arquivo de classe do depurador não existe');
}
}
,
apresentarei a escrita da classe StupidParser. Por favor, continue apoiando. Se você tiver algum comentário ou sugestão, pode apresentar
!
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
classe Estúpido {
privado $_tpl_vars;
privado $_tpl_file;
privado $_parser;
private $_debug;
função pública Estúpido() {
if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Erro: Defina a pasta de modelo e a pasta de compilação corretamente');
}
}
função pública atribuir($var, $valor) {
if(isset($var) && trim($var) != '') {
$this->_tpl_vars[$var] = $valor;
retornar verdadeiro;
} outro {
exit('Erro: Por favor, defina o nome da variável');
}
}
exibição de função pública($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('Erro: arquivo de modelo não 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 = new StupidParser();
$this->_parser->compile($tpl_file);
}
inclua $parsed_file;
}
função depuração($tpl_file) {
if (include_once("estúpido_debugger.class.php")) {
$this->_debugger = new StupidDebugger($this->_template_dir . $tpl_file);
$this->_debugger->start();
} outro {
exit('Erro: arquivo de classe do depurador não existe');
}
}
}
?>