コンテンツタイプに段落を使用しています。段落タイプを作成し、コンテンツを追加しました。次に、foreach
に段落をロードします。しかし、何も表示されていません。 $paras
は空です:
$node = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();
$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();
}
get()
をフィールド名に直接置き換えるだけです:
$node = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();
この方法は少し速く動作します。
_// 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()
のノードと段落のストレージをロードすることもできます。