La semana pasada publicábamos un post sobre el sistema de plantillas de Earwyn, en el que se comentaba la necesidad de crear plantillas adicionales para definir elementos repetitivos dentro de la misma plantilla. En estos dÃas, este tema ha quedado solventado.
Subplantillas
La forma de solucionarlo ha sido ampliando el parser de plantillas, reconociendo ahora la parte de código perteneciente a una subplantilla definida dentro de la propia plantilla. Es decir, existe una plantilla llamada list.html, ésta podrá contener tanto el código general de la lista como el código que dará formato a cada elemento de la lista, sin necesidad de tener este código aparte en otra plantilla, como se hacÃa en la anterior versión.
En una misma plantilla se pueden definir ilimitadas subplantillas, asignándolas un nombre. Por ejemplo:
<ul >
[st:list_item]< li class=”mi_clase”>¿elem?</li>[/st]
< /ul>
En el código php del módulo que tiene asociado la plantilla que aloja el código de ejemplo, podrÃamos cargar la subplantilla con un método, tal que
$wod_engine->set_subtpl(”list_item”);
Y utilizar la subplantilla como si se hubiera definido una plantilla normal, reemplazando el tag y lo presente dentro de él de forma análoga a las variables calculadas:
$wod_engine->add_subtpl(”list_item”, $listado);
De este modo, nos ahorramos todas las plantillas .html que pertenecÃan a filas de tablas, elementos de listas… ganando mucho en organización tanto de ficheros como de funcionamiento.
Resumiendo
La forma básica del uso de todo esto, serÃa algo como:
- Definir cual será la plantilla general que el módulo lleva asociada. (set_template)
- Calcular el contenido de cada subplantilla en ella (set_subtpl y add_subtpl)
- Calcular el contenido de la plantilla general
- Obtener el código xhtml de todo el conjunto (get_xhtml)
Y algo más
En el post anterior, no comentamos que desde las plantillas también es posible llamar a funciones php, encerrándolas entre los sÃmbolos []. Asà en muchas ocasiones podemos ahorrar definir y calcular variables mediante ¿? y mostrar el contenido deseado directamente.