Estoy tratando de representar una plantilla en Drupal 8. En Drupal 7, crearía un tema con hook_theme, crearía un directorio de plantillas en mi módulo, colocaría el archivo de plantilla y podría mostrarlo con theme (). ¿Cómo hago el eqivilent con Drupal 8? Intenté lo siguiente, pero falla:
En twitter_pull.module
/ ** * Implementa hook_theme (). * / función twitter_pull_theme ($ existente, $ tipo, $ tema, $ ruta) { matriz de retorno ( 'twitter_pull_tweet_listing' => array ( 'variables' => array ( 'description' => array (), ), 'template' => 'templates / twitter_pull_tweet_listing', ), ); }
Dentro de twitter_pull / templates: twitter_pull_tweet_listing.html.twig
Dentro de mi bloque:
$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params)); $ output = drupal_render ($ tweet_template, array ('params' => $ params)); print $ output;
Me sale el siguiente error en mis registros:
Error de usuario: "contenido" es una clave de matriz de procesamiento no válida en Drupal \ Core \ Render \ Element :: children () (línea 89 de C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. php).
EDITAR: Otro error:
Twig_Error_Loader: no se puede encontrar la plantilla "modules / custom / twitter_pull / templates / templates / twitter_pull_tweet_listing.html.twig" (examinado: C: \ xampp \ htdocs \ drupal). en Twig_Loader_Filesystem-> findTemplate () (línea 202 de C: \ xampp \ htdocs \ drupal \ core \ vendor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php).
Me imagino que este error está ocurriendo porque no estoy usando espacios de nombres y carga automática correctamente. ¿Dónde pongo mi archivo de plantilla? Basado en el mensaje de error, incluso intenté ponerlo en C: \ xampp \ htdocs \ drupal \ templates \ pero aún así no funcionó.
drupal_render()
? Se espera un booleanotemplates/templates/
parte en el segundo mensaje de error que me hace pensar que debe tratar'template' => 'twitter_pull_tweet_listing',
en lugar de'template' => 'templates/twitter_pull_tweet_listing',
enhook_theme()
Respuestas:
En general, en Drupal 8 debe omitir la línea de la plantilla y nombrar la plantilla igual que su gancho, convirtiendo los guiones bajos en guiones. Esto se modificó porque las plantillas son el formato de salida predeterminado para la salida con tema en D8. Entonces en tu caso esto
hook_theme()
:... apuntaría a una plantilla en
templates/twitter-pull-tweet-listing.html.twig
. (Eso está usando una sintaxis de matriz corta ).Registro de cambio relevante: https://www.drupal.org/node/2231673
Y también, desde un bloque o controlador, devuelva una matriz de representación en lugar de una cadena. De esa manera, los resultados se pueden manipular después y los datos sin procesar aún son accesibles en el futuro. En otras palabras, evite llamar
drupal_render()
desde su código siempre que sea posible. Esto también se aplica a Drupal 7: https://www.drupal.org/node/930760#creatingEntonces de tu bloque:
fuente