logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Agregar una plantilla de tematización en un módulo de Drupal

20/06/2025, by Ivan

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:

06_0

07_0

08_0

Source URL:

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.