Estou tentando renderizar um modelo no Drupal 8. No Drupal 7, eu criaria um tema com hook_theme, criaria um diretório de modelos no meu módulo, soltaria o arquivo de modelo e eu poderia exibi-lo com theme (). Como eu faço o eqivilent com o Drupal 8? Eu tentei o seguinte, mas ele errou:
No twitter_pull.module
/ ** * Implementa hook_theme (). * / função twitter_pull_theme ($ existente, $ tipo, $ tema, $ caminho) { matriz de retorno ( 'twitter_pull_tweet_listing' => matriz ( 'variable' => array ( 'description' => array (), ), 'template' => 'templates / twitter_pull_tweet_listing', ), ); }
Por dentro twitter_pull / templates: the twitter_pull_tweet_listing.html.twig
Dentro do meu bloco:
$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params)); $ output = drupal_render ($ tweet_template, array ('params' => $ params)); imprime $ output;
Eu recebo o seguinte erro nos meus logs:
Erro do usuário: "content" é uma chave de matriz de renderização inválida em Drupal \ Core \ Render \ Element :: children () (linha 89 de C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. php).
EDIT: Outro erro:
Twig_Error_Loader: Não foi possível encontrar o modelo "modules / custom / twitter_pull / templates / templates / twitter_pull_tweet_listing.html.twig" (olhou para: C: \ xampp \ htdocs \ drupal). em Twig_Loader_Filesystem-> findTemplate () (linha 202 de C: \ xampp \ htdocs \ drupal \ core \ vendedor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php).
Imagino que esse erro esteja ocorrendo porque não estou usando espaços para nome e carregamento automático corretamente. Onde coloco meu arquivo de modelo? Com base na mensagem de erro, tentei colocá-lo em C: \ xampp \ htdocs \ drupal \ templates \, mas ainda não funcionou.
drupal_render()
? Está esperando um booleanotemplates/templates/
parte da 2ª mensagem de erro me faz pensar que você deveria tentar em'template' => 'twitter_pull_tweet_listing',
vez de'template' => 'templates/twitter_pull_tweet_listing',
emhook_theme()
Respostas:
Em geral, no Drupal 8, você deve deixar de fora a linha do modelo e nomeá-lo da mesma forma que o seu gancho, convertendo os sublinhados em traços. Isso foi alterado porque os modelos são o formato de saída padrão para saída utilizável no D8. Então, no seu caso, isso
hook_theme()
:… Apontaria para um modelo em
templates/twitter-pull-tweet-listing.html.twig
. (Isso está usando sintaxe de matriz curta .)Registro de alteração relevante: https://www.drupal.org/node/2231673
E também, de um bloco ou controlador, retorne uma matriz de renderização em vez de uma string. Dessa forma, os resultados podem ser manipulados posteriormente e os dados brutos ainda estão acessíveis na linha. Em outras palavras, evite ligar
drupal_render()
do seu código sempre que possível. Isso também se aplica ao Drupal 7: https://www.drupal.org/node/930760#creatingEntão, do seu bloco:
fonte