plantillas con includes recursivos

febrero 26, 2010

Existen 0|1 tipos de personas programadoras: las que usan expresiones regulares y las que no. Si eres de las segundas, y quieres dedicarte a la programación web…harías mejor en buscarte otro hobby.

Las expresiones regulares son imprescindibles si tenemos que parsear, filtrar, o rebuscar en código HTML. Son complicadas de aprender, difíciles de escribir, y la depuración de errores parece mas un arte esotérico que una ciencia, pero una vez aprendidas, las resultados son asombrosos y elegantes.

Pongamos un ejemplo sencillo: he programado un maquetador, que lee un fichero tpl que hace de plantilla. Estos plantillas puede tener otras plantillas insertadas mediante la siguiente marca:
<%include fichero_plantilla%>

La función para hacer todo eso es:

function maquetador_insertar_include ( $plantilla ){
   static $path;
   if ( is_array($plantilla) ) {
   	$plantilla = $plantilla[1];
   }
   if ( !$path ) {
   	$path      = dirname($plantilla);
   	$plantilla = basename($plantilla);   	
   }
   return preg_replace_callback ( "/<%include ([^%]*)%>/i", 
              "maquetador_insertar_include",  
              file_get_contents( "$path/$plantilla" ) )
}

El truco consiste, en usar la función preg_replace_callback (si, tiene un nombre feo, pero es de útil, oiga) que busca el patrón de include y cada vez que lo encuentra lo sustituye por la llamada a una función. En esta caso, la función es recursiva. Lo único a tener en cuenta, es que la primera llamada se define el directorio base de todas las plantillas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: