Hook_theme a Drupal 7 i Drupal 8
A Drupal 7/8 disposem del hook_theme per poder de definir com imprimir un conjunt de dades en format HTML.
Com utilitzar el hook_theme a Drupal 7 i Drupal 8?
Per exemple, el nucli de Drupal i diversos mòduls contribuïts defineixen les seves plantilles o funcions de tematització per imprimir un paginador, una taula de dades, un menú, etc. En qualsevol moment, a través del "hook" esmentat podem definir una manera personalitzada d'imprimir les nostres dades o d'imprimir dades d'altres mòduls de forma diferent. Per fer-ho tenim dues opcions:
- Fitxer de plantilla: Definim com s'imprimeixen les dades a través d'un fitxer de plantilla. Únic mètode vàlid a Drupal 8 perquè obliga a separar clarament el tractament de les dades de la seva visualització.
- Funció de tematització: Definim com s'imprimeixen les dades a través d'una funció. Aquest mètode només és vàlid a Drupal 7 i no es tan elegant donat que permet barrejar codi HTML amb codi PHP.
A continuació podem veure un exemple d'implementació del hook_theme a Drupal 7. Aquí podem veure com definim una manera personalitzada d'imprimir enllaços a partir de tres variables: href, class i title.
<?php
/**
* Implements hook_theme().
*/
function MODULE_NAME_theme() {
// Opció 1: Fitxer de plantilla
$themes['customlink'] = array(
'variables' => array('href' => NULL, 'class' => NULL, 'title' => NULL),
'template' => 'customlink', //Nom del fitxer de plantilla.
'path' => drupal_get_path('module', 'MODULE_NAME') . '/templates', //Ubicació del fitxer.
);
// Opció 2: Funció de tematització
$themes['custom_link_bis'] = array(
'variables' => array('href' => NULL, 'class' => NULL, 'title' => NULL),
'file' => 'MODULE_NAME.themable.inc', // Ubicació de la funció.
);
return $themes;
}
Contingut del fitxer templates/customlink.tpl.php:
<a href="<?php print $href;?>" class="<?php print $class;?>"><?php print $title;?></a>
Contingut del fitxer MODULE_NAME.themable.inc
<?php
/**
* Renderització d'un link de forma personalitzada (Opció 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;
}
Aleshores, per fer ús d'aquesta nova manera d'imprimir un enllaç, haurem de fer el següent:
<?php
$params = array(
'href' => 'drauta.com',
'class' => 'external',
'title' => 'Drauta website'
);
// Opció 1
$output = theme('customlink', $params);
print $output;
// Opció 2
$output = theme('custom_link_bis', $params);
print $output;
Comparteix aquest article