Agregar una plantilla de tematización en un módulo de Drupal
Parte III de la guía práctica para crear módulos básicos en Drupal 8
De .info a pruebas, solo lo básico
loremipsum.module
/** * Implementa hook_theme(). */ function loremipsum_theme($existing, $type, $theme, $path) { $variables = array( 'loremipsum' => array( 'variables' => array( 'source_text' => NULL, ), 'template' => 'loremipsum', ), ); return $variables; }
Otra razón para no abandonar el archivo .module es que ahí es donde va el hook_theme(). Funciona casi igual que en D7: declaras un arreglo que contiene tus variables y el archivo de plantilla, que debe guardarse en el lugar correcto (carpeta de plantillas) con la extensión .html.twig.
Luego, antes de pasar el arreglo para renderizar en Twig, puedes hacer algún preprocesamiento. El siguiente hook inserta puntuación aleatoria al final de cada oración:
/** * Función de preprocesamiento para la plantilla Lorem ipsum. * * @param array $variables * Un arreglo asociativo que contiene: * - source_text */ function template_preprocess_loremipsum(&$variables) { $punctuation = array('. ', '! ', '? ', '... ', ': ', '; '); for ($i = 0; $i < count($variables['source_text']); $i++) { $big_text = explode('. ', $variables['source_text'][$i]); for ($j = 0; $j < count($big_text) - 1; $j++) { $big_text[$j] .= $punctuation[floor(mt_rand(0, count($punctuation) - 1))]; } $variables['source_text'][$i] = implode('', $big_text); } }
/templates/loremipsum.html.twig
{# /** * @file * Implementación de tema por defecto para imprimir texto Lorem ipsum. * * Variables disponibles: * - source_text * * @see template_preprocess_loremipsum() * * @ingroup themeable */ #} <div class="loremipsum"> {% for item in source_text %} <p>{{ item }}</p> {% endfor %} </div>
Ahora el arreglo $source_text se procesa con un simple ciclo for dentro de nuestra plantilla, envuelto en etiquetas <p>.
Fíjate en la correspondencia entre hook_theme(), template_preprocess_hook() y nuestro archivo Twig:
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.