Como carregar a entidade de parágrafo no objeto nó?


12

Estou usando parágrafos no meu tipo de conteúdo. Eu criei um tipo de parágrafo e adicionei conteúdo. Agora eu quero carregar os parágrafos em a foreach. Mas nada está aparecendo. $parasestá vazia:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();

Você disse $ paras mostrando em branco. mas você não mostrou como imprimiu seu valor. É um NULLvalor, uma sequência vazia ou uma matriz vazia? Como você comentou, eu já fiz isso, mas sua resposta está correta , o que mostra um código completamente diferente, sua pergunta fica um pouco confusa e não está claro o que você não consegue alcançar.
kiamlaluno

Esta pergunta foi feita quando eu sou muito novo no drupal 8, fazendo tarefas para aprender. Acho que cometi algum erro no processo para que o tempo apareça em branco. Mas quando faço o mesmo agora, está funcionando bem. você verifica aqui uma demo que executa o mesmo código. Eu apenas criei isso para você, d2log.ply.st/devel/php nome de usuário :: admin senha :: admin
Pankaj Yogi

Respostas:


23
$paragraph = $node->field_paragraph->getValue();
// Loop through the result set.
foreach ( $paragraph as $element ) {
  $p = \Drupal\paragraphs\Entity\Paragraph::load( $element['target_id'] );
  $text = $p->field_name->getValue();
}

Eu já fiz isso, mas sua resposta está certa.
Pankaj Yogi 28/08

Cuidado: esta solução não inclui traduções.
ssibal

Em vez de Paragraph :: load ($ tid), agora devemos usar \ Drupal :: entityManager () -> getStorage ('paragraph') -> load ($ tid).
JF Kiwad 9/02/19

6

Basta substituir get()diretamente pelo nome do campo:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();

Uau, sim, mas por quê?
Leymannx

0

Este método funcionará um pouco mais rápido.

// Get data from field.
if ($paragraph_field_items = $node->get('field_paragraph')->getValue()) {
  // Get storage. It very useful for loading a small number of objects.
  $paragraph_storage = \Drupal::entityTypeManager()->getStorage('paragraph');
  // Collect paragraph field's ids.
  $ids = array_column($paragraph_field_items, 'target_id');
  // Load all paragraph objects.
  $paragraphs_objects = $paragraph_storage->loadMultiple($ids);
  /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
  foreach ($paragraphs_objects as $paragraph) {
    // Get field from the paragraph.
    $text = $paragraph->get('field_title')->value;
    // Do something with $text...
  }
}

Você também pode implementar facilmente esse código em algum método no seu serviço personalizado com @entity_type.managerargumento e carregar armazenamento para nós e parágrafos __construct().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.