Sobrescritura de templates en Drupal

Todos los que trabajamos con Drupal a menudo sabemos que integrar una maqueta no es nada fácil, muchos de los módulos aportados por la comunidad y otros tantos del core de Drupal tienen sus propios templates y es muy recomendable no hacer cambios en dichos módulos, ya sea para poder actualizar más fácilmente los propios módulos(en un futuro) o poder realizar una nueva actualización de Drupal o bien para no hacer modificaciones que puedan alterar el comportamiento de nuestra aplicación ya que si cambiamos algún módulo estable aportado por la comunidad nos veríamos en la necesidad/obligación de mantenerlo nosotros mismos en nuestra aplicación sin embargo si no cambiamos el código éste será mantenido por la comunidad.

 

En Drupal tenemos varias formas de crear templates y los módulos aportados no siempre lo hacen de igual forma por tanto para poder sobrescribir los templates tendremos dos formas básicas:

 

1 – Creando una tpl en nuestro theme.

 

Por ejemplo hay módulos que declaran sus templates de la siguiente forma (que sería lo lógico):

 

/**

* Implementation of hook_theme()

*/

function nombremodulo_theme() {

return array(

'nombremodulo_block' => array(

'arguments' => array('var1' => NULL, 'var2' => array()),

'template' => 'nombremodulo-block',

));

}

 

En la misma carpeta de este módulo encontraremos la una template llamada “nombremodulo-block.tpl.php”, un ejemplo de esto lo podemos ver en el módulo profile o el módulo comment del core de Drupal.

 

Para poder sobrescribir la plantilla “nombremodulo-block.tpl.php” lo que tendremos que hacer es crear una template con el mismo nombre dentro de nuestro theme, es decir en “sites/all/themes/customtheme” o sites/midominio/themes/customtheme. La estructura quedaría más o menos así:

Profiles treetheme tree

 

 

Ahora podríamos editar la plantilla a nuestro gusto dentro de nuestro theme sin preocuparnos del módulo en cuestión.

 

2- Creando una función en nuestro template.php.

 

Otra forma que tienen algunos módulos aportados por la comunidad y el propio core de Drupal es creando el theme utilizando el hook_theme

 

/**

* Implementation of hook_theme()

*/

function nombremodulo_theme() {

return array(

'nombremodulo_block' => array(

'arguments' => array('var1' => NULL, 'var2' => array()),

));

}

 

pero sin utilizar ninguna plantilla (omitiendo el argumento 'template') como veíamos en el ejemplo anterior. En este caso utilizarían esta función dentro del módulo para mostrar la maquetación:

 

function theme_nombremodulo_block($vars) {

$items = array();

foreach ($vars as $var) {

$items[] = l($var->subject, 'node/'. $var->nid);

}

if ($items) {

return theme('item_list', $items);

}

}

 

Para poder sobrescribir este tipo de themes sin modificar el código del módulo tendremos que crear la función dentro de nuestro theme, concretamente debemos hacerlo dentro del archivo template.php (este archivo ya podríamos editarlo a nuestro gusto):

 

function customtheme_nombremodulo_block($vars) {

$items = array();

foreach ($vars as $var) {

$items[] = l($var->subject, 'node/'. $var->nid);

}

if ($items) {

return theme('custom_list', $items);

}

}

 

Si queremos para tener todo más organizado podemos dentro del archivo template.php hacer includes de otros archivos para reorganizar todas las sobrescrituras de plantillas:

 

include(path_to_theme().'/overrides/activity/template.php');
include(path_to_theme().'/overrides/tagadelic/template.php');
include(path_to_theme().'/overrides/fivestar/template.php');

 

y dentro de cada una de ellas ya incluir la sobrescritura correspondiente a su módulo.

 

Nota: Después de realizar estas acciones es necesario limpiar la caché ya que si no lo hacemos probablemente no veamos reflejados nuestros cambios y pensaremos que algo hemos hecho mal.

 

Para más información acerca de este tema recomendamos ver los siguientes enlaces (inglés):

 

Manuales

Hola mi nombre es Diego Saavedra, soy estudiante de la Universidad Nacional de Loja, curso el 6to modulo de Informática Educativa, en nuestra universidad tiene una forma de estudiar diferente a las demas universidades, puesto que aparte de toda la fundamentación teorica realizamos investigaciones por ciclos o módulos, los cuales nos permiten adentrarnos en la practica de lo que aprendemos, en este módulo con 4 compañeros mas nos hemos propuesto desarrollar un sistema que funciones atraves de una pagina web, para ello hemos decididos utilizar este cms como punto de partida, conocemos como se utiliza el xampp y lo hemos implementado en algunas portatiles y algunas pc de escritorio, actualmente despues de crear las clases y los casos de uso del sistema como primera fase y despues de recopilar toda la información necesaria nos hemos propuesto el desarrollo de la aplicación.

 

Para ello hemos empezado con la creación de módulos del sistema que deseamos llevar a termino, pero nos encontramos con un problema super importante la documentacion necesaria para poder crear los módulos, los felicito por el espacio, se que aun esta en mantenimiento puesto que no se ha subido aun la información, me gustaria que me proporcionen la informacion necesaria para poder llevarla acabo pero en español porque las traducciones que realizamos de la pagina oficial tienen algunos fallos, de la manera mas comedida me dirijo a uds para solicitar manuales sobre la creacion de los modulos, sus respectivos llamados a la creacion de las bases de datos en mysql  otra aplicación para poder crearlas atraves de postgres, desde ya les antelo mis mas sinceros agradecimientos

 

Me imagino que mi correo despues del registro ya esta dentro de su base de datos o codificación de setings.php pero se la adjunto nuevamente diego_locomia@hotmail.com

 

Pd: Espero pronta respuesta y felicitaciones si les podemos colaborar en algo estaremos gustosos en hacerlo

 

Publicar nuevo comentario

  • Las direcciones de páginas web y las direcciones de correo se convierten automáticamente en enlaces.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Las líneas y los párrafos se terminan automáticamente.

Más información sobre las opciones de formateo

CAPTCHA

Esta pregunta se hace para comprobar que es usted una persona real e impedir el envío automatizado de mensajes basura.
Imagen de CAPTCHA
Escriba los caracteres (sin espacios) que se deben mostrar en la imagen.