Después de la clase más simple lanzada la última vez ( http://bbs.phpchina.com/thread-85257-1-1.html ), se descubrió que hay muchos defectos, como no admitir matrices multidimensionales, comentarios y no Función de almacenamiento en caché, ¡esta vez agrego todas estas funciones! ! !
Si está interesado, la próxima vez publicaré un tutorial para hablar sobre algunas de mis ideas y métodos para escribir esta clase. ! ! ¡Si apoyas, puedes seguirme y apoyarme!
código PHP:
simplet.clase.php
<?php
clase SimpleT {
privado $t_vars;
privado $templates_dir;
privado $templates_c_dir;
caché $ privada;
privado $cache_dir;
función pública __construct() {
$this->templates_dir = './templates/';
$this->templates_c_dir = './templates_c/';
$this->caché = 0;
$this->cache_dir = './cache/';
}
función pública setDir($dir, $tipo = 'plantilla') {
si(is_dir($dir)) {
si($tipo == 'plantilla')
$this->templates_dir = rtrim($dir, '/').'/';
elseif($tipo == 'template_c')
$this->templates_c_dir = rtrim($dir, '/').'/';
elseif($tipo == 'caché')
$this->cache_dir = rtrim($dir, '/').'/';
demás
devolver falso;
devolver verdadero;
} demás {
devolver falso;
}
}
caché de función pública ($ tiempo) {
if(is_numeric($hora)) {
$this->cache = $tiempo;
devolver verdadero;
} demás {
devolver falso;
}
}
función pública asignar($var, $valor = NULL) {
si (is_array($var)) {
foreach ($var como $clave => $val) {
$this->t_vars[$key] = $val;
}
} demás {
$this->t_vars[$var] = $valor;
}
}
función privada comp($nombre de archivo) {
intentar {
if(!$fp = fopen($nombre de archivo, 'r')) {
lanzar nueva excepción ('No se puede abrir'. $nombre de archivo);
}
$tamaño de archivo = tamaño de archivo($nombre de archivo);
if($tamaño de archivo <= 0) {
throw new Exception('El tamaño del archivo debe > 0 ');
}
$contenido = fread($fp, $tamaño de archivo);
fclose($fp);
desarmado($fp);
$content = preg_replace("/<%=([$a-zA-Z0-9_]{1,})%>/","<?php echo \$$1 ;?>", $content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop%>/", "<?php foreach( \$$1 as \$$1_key => \$$1_val ) { ?>",$contenido);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop(([$a-zA-Z0-9_]{1,})) %>/", "<?php foreach( \$$1 como \$$2 ) { ?>", $contenido);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop(([$a-zA-Z0-9_]{1,}),( [$a-zA-Z0-9_]{1,}))%>/", "<?php foreach( \$$1 como \$$2 => \$$3 ) { ?>", $contenido);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).key%>/", "<?php echo \$$1_key ;?>", $ contenido);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).value%>/", "<?php echo \$$1_val ;?>", $ contenido);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,})\?%>/", "<?php if( \$$1 == verdadero) { ? >", $contenido);
$content = preg_replace("/<%end%>/","<?php } ?>", $content);
$content = preg_replace("/<%##common##%>([^<%##end##%>]{0,})<%##end##%>/", "<?php n/* $1 */n?>", $contenido);
if (preg_match_all("/<%{([^(}%>)]{1,})}%>/", $contenido, $archivos)) {
$this->comp($this->templates_dir . $archivos[1][0]);
}
$content = preg_replace("/<%{([^(}%>)]{1,})}%>/", "<?php include '{$this->templates_c_dir}simplet_comp_$1.php'; ? >", $contenido);
eco $contenido;
$fp = fopen($this->templates_c_dir . 'simplet_comp_' . nombre base($nombre de archivo) . '.php', 'w');
if(!fwrite($fp, $contenido)) {
throw new Exception('No se puede escribir contenido en ' . $nombre de archivo);
}
fclose($fp);
} captura (Excepción $e) {
echo $e->getMessage();
}
devolver verdadero;
}
visualización de función pública ($nombre de archivo) {
$nombre de archivo = $this->templates_dir .
if(!file_exists($nombre de archivo)) {
devolver falso;
}
$t_filename_c = $this->templates_c_dir .'simplet_comp_' nombrebase($nombredearchivo) .'.php';
if(!file_exists($t_filename_c) || filemtime($t_filename_c) < filemtime($filename)) {
$this->comp($nombre de archivo);
}
if($this->caché > 0) {
$cache_file = $this->cache_dir . nombrebase($nombredearchivo);
if(!file_exists($cache_file) || (tiempo() - filemtime($cache_file)) > $this->cache) {
ob_start();
foreach ($this->t_vars como $clave => $val) {
$$clave = $val;
}
incluir($t_filename_c);
$contenido = ob_get_contents();
ob_end_clean();
$fp = fopen($cache_file, 'w');
fwrite($fp, $contenido);
fclose($fp);
eco $contenido;
desarmado($contenido);
} demás {
incluir($cache_file);
}
} demás {
foreach ($this->t_vars como $clave => $val) {
$$clave = $val;
}
incluir($t_filename_c);
}
}
}
?>
Código PHP:
prueba.php
<?php
require_once('simplet.class.php');
$t = nuevo SimpleT();
$t->cache(10);//Habilite la función de caché y establezca el tiempo de caducidad en 10 segundos
$t->assign('arrays', array(array('hola','mundo')));
$t->assign('condición',falso);
$t->display('index.php');
?>
Código PHP:
index.php (archivo de plantilla, colocado en plantillas/carpeta)
<%##common##%>
Aquí está el comentario y debajo está el bucle de matriz multidimensional.
<%##fin##%>
<%arrays.loop(valor)%>
<%valor.loop(nombre)%>
<%=nombre%>
<%fin%>
<%end%>
<%##común##%>
El siguiente es el juicio condicional.
<%##fin##%>
<%condición?%>
<h1>La condición es verdadera</h1>
<%end%>
<%##común##%>
A continuación se muestra el archivo de inclusión()
<%##fin##%>
<%{nombredearchivo.php}%>