Drupal

Hook_theme en Drupal 7 y Drupal 8

En Drupal 7/8 disponemos del hook_theme para poder definir como imprimir un conjunto de datos en formato HTML.

Drauta agencia digitalDrauta

Hook_theme en Drupal 7 y Drupal 8

¿Cómo usar el hook_theme en Drupal 7 y Drupal 8?

Por ejemplo, el núcleo de Drupal y varios módulos contribuidos definen sus plantillas o funciones de tematización para imprimir un paginador, una tabla de datos, un menú, etc. En cualquier momento, a través del "hook" nombrado podemos definir una manera personalizada de imprimir nuestros datos o imprimir datos de otros módulos de forma diferente. Para hacerlo tenemos dos opciones:

  • Fichero de plantilla: Definimos como se imprimen los datos a través de un fichero de plantilla. Único método válido en Drupal 8 porque obliga a separar claramente el tratamiento de los datos de su visualización.
  • Funció de tematización: Definimos como se imprimen los datos a través de una función. Este método sólo es válido en Drupal 7 y no es tan elegante dado que permite mezclar código HTML con código PHP.

A continuación podemos ver un ejemplo de implementación del hook_theme en Drupal 7. Aquí podemos ver como definimos una manera personalizada de imprimir enlaces a partir de tres variables: href, class y title.

<?php
/**
 * Implements hook_theme().
 */

function MODULE_NAME_theme() {
   
  // Opción 1: Fichero de plantilla.
  $themes['customlink'] = array(
    'variables' => array('href' => NULL, 'class' => NULL, 'title' => NULL),
    'template' => 'customlink', //Nombre del fichero de plantilla.
    'path' => drupal_get_path('module', 'MODULE_NAME') . '/templates', //Ubicación del fichero.
  );

  // Opció 2: Función de tematización
  $themes['custom_link_bis'] = array(
    'variables' => array('href' => NULL, 'class' => NULL, 'title' => NULL),
    'file' => 'MODULE_NAME.themable.inc', // Ubicación de la función.
  );

  return $themes;
}

Contenido del fichero templates/customlink.tpl.php:

<a href="<?php print $href;?>" class="<?php print $class;?>"><?php print $title;?></a>

Contenido del fichero MODULE_NAME.themable.inc

<?php
/**
 * Renderización de un link de forma personalizada (Opción 2).
 *
 * @ingroup themeable
 */
function theme_custom_link_bis($variables) {
  $href = $variables['href'];
  $class = $variables['class'];
  $title = $variables['title'];
  
  $output = '<a href="'. $href .'" class="' . $class . '">' . $title . '</a>';

  return $output;
}

Por lo tanto, para hacer uso de esta nueva manera de imprimir un enlace, tendremos que hacer lo siguiente:

<?php

$params = array(
  'href' => 'drauta.com',
  'class' => 'external',
  'title' => 'Drauta website'
);

// Opción 1
$output = theme('customlink', $params);
print $output;

// Opción 2
$output = theme('custom_link_bis', $params);
print $output;

 

¿Quieres empezar un nuevo proyecto con nosotros?

¿Necesitas servicios para tu web? Descubre como te podemos ayudar y no dudes en contactar con nosotros.