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.