如何在节点对象上加载段落实体?


12

我在内容类型中使用了段落。我创建了一个段落类型并添加了内容。现在,我想将段落加载到中foreach。但是什么都没有出现。$paras是空的:

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

您说$ paras显示空白。但您没有显示如何打印其价值。是NULL值,空字符串还是空数组?既然您已经对我发表了评论,但是您的答案是正确的答案,因为它显示了完全不同的代码,因此您的问题有些困惑,并且不清楚您无法实现什么。
kiamlaluno

这个问题问我在drupal 8中是什么时候很陌生,正在做学习任务。我认为我在执行过程中出错了,所以时间显示为空白。但是当我现在这样做时,它可以正常工作。您在此处检查演示是否运行相同的代码。我只是为您创建一个,d2log.ply.st/devel/php 用户名::管理员密码:: admin
Pankaj Yogi

Answers:


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();
}

我已经做到了,但是您的答案是正确的。
Pankaj Yogi

请注意:此解决方案不包括翻译。
ssibal

现在应该使用\ Drupal :: entityManager()-> getStorage('paragraph')-> load($ tid)代替Paragraph :: load($ tid)。
JF Kiwad '19年

6

只需get()直接用字段名称替换即可:

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

哇,是的,但是为什么呢?
leymannx

0

此方法将更快地工作。

// 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...
  }
}

您还可以在自定义服务中的某些方法中轻松实现此代码,@entity_type.manager并为中的节点和段落提供参数和负载存储__construct()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.