Como você pode renderizar campos de uma referência de entidade nos modelos de nó? [Drupal 8]

9

Por contexto, estou lidando com dois tipos de conteúdo: article e team_profile. Nos nós do artigo, temos um campo de referência da entidade que puxa um nó team_profile para servir como informações do autor.

Gostaria apenas de renderizar a entidade com um novo modo de exibição, mas nosso design tem a foto definida diretamente acima da data e nome publicados, um ao lado do outro: captura de tela do design das informações do autor

No D7, eu dpm($content)detalharia as informações do nó, clique duas vezes e puxe o restante do caminho de referência. Estou usando o kint e sou capaz de cuspir o conteúdo de referência da entidade para um determinado nível {{ kint(content.field_blog_author[0]['#node']) }},. O próximo nível que quero acessar é values, mas tentar o seguinte me dá NULL:

  • content.field_blog_author[0]['#node’][‘values’]
  • content.field_blog_author[0]['#node’]=>values
  • content.field_blog_author[0]['#node’]->values

Eu gostaria de renderizar os campos titlee field_team_imagedo nó referenciado ( visto aqui na saída kint ). Não encontrei informações sobre isso, é a documentação ou pesquisando. Alguém me ajudaria a soltar?

alexbea
fonte

Respostas:

13

#node, na verdade, existe o nó atual.

Se você deseja acessar os campos e seus valores, comece com o nó, não com o conteúdo, que é uma matriz de renderização com os campos configurados.

Você pode acessar a entidade de referência como esta {{ node.field_blog_author.entity }}.

A partir daí, você pode continuar novamente no campo da entidade referenciada que deseja exibir. Você pode tentar chamar o método view, com o visualiza com as configurações padrão, também pode passar um modo de visualização como uma string para ele ou com as configurações de exibição de um array (não tem certeza da sintaxe exata para isso no twig).

Além disso, minha referência padrão, consulte http://wizzlern.nl/drupal/drupal-8-entity-cheat-sheet para obter uma ótima visão geral das entidades de conteúdo, como elas estão estruturadas e como acessar valores. A maior parte disso também se aplica ao ramo.

E por último, ao tentar descobrir o que há em uma entidade de conteúdo, use node.toArray (), que fornece uma representação de matriz muito próxima de como você pode acessá-la como um objeto. Enquanto a estrutura interna é bem diferente.

Berdir
fonte
Obrigado, Berdir. {{ kint(node.field_blog_author.entity) }}produz uma boa matriz do nó referenciado, mas agora não posso ir mais fundo. {{ kint(node.field_blog_author.entity.title) }}, por exemplo, quebra a página, carregando nenhum recurso ou qualquer coisa além da região do cabeçalho. O mesmo para nidou para outros. Apenas para rir, tentar incluir a entidade referenciada no conteúdo do nó {{ node.field_blog_author.entity }}retornou uma mensagem de erro aparentemente dizendo que o nó não podia ser mostrado no modelo dessa maneira.
Alexbea
Parece que esses podem ser valores protegidos . Isso soa certo? Talvez eu precise criar um modo de exibição apenas para a foto e usar o modo de exibição "label" para o nome.
Alexbea
Sim, eles estão protegidos. Como eu disse, use toArray (), que também funciona no node.field_blog_author.entity.title é um objeto de campo, se você deseja avaliar, você precisa ... entity.title.value. Certifique-se de ler a folha de dicas mencionada, pois explica muitas dessas coisas.
Berdir
11
Agradeço a ajuda. Eu realmente não entendo como usar as informações na cábula, no entanto. A adição .valuefuncionou neste caso e responde à minha pergunta original.
Alexbea
@berdir o URL do site está quebrado.
chalo 13/04