노드 객체에 단락 엔티티를로드하는 방법은 무엇입니까?


12

콘텐츠 형식에 단락을 사용하고 있습니다. 단락 유형을 만들고 내용을 추가했습니다. 이제 단락을에로드하고 싶습니다 foreach. 그러나 아무것도 나타나지 않습니다. $paras비었다:

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

당신은 $ paras가 비어 있다고 말했습니다 . 그러나 그 가치를 어떻게 인쇄했는지 보여주지 않았습니다. 그것은이다 NULL값, 빈 문자열, 빈 상태 (empty)의 배열? 당신이 주석 이후 나는 이미 이런 짓을하지만 대답은 맞다 귀하의 질문에 조금 혼란 도착, 당신이 달성 할 수없는 무엇인지 분명하지 않다, 완전히 다른 코드를 보여주고 대답에.
kiamlaluno

이 질문은 drupal 8이 학습을위한 작업을하는 데 매우 익숙 할 때 물었습니다. 프로세스에서 약간의 오류가 발생하여 시간이 공백으로 표시됩니다. 그러나 지금 동일하게 수행하면 정상적으로 작동합니다. 데모 실행에서 동일한 코드를 확인하십시오. 난 그냥 당신을 위해 이것을 만듭니다, d2log.ply.st/devel/php username :: admin password :: admin
Pankaj Yogi

답변:


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

단락 :: load ($ tid) 대신 \ Drupal :: entityManager ()-> getStorage ( 'paragraph')-> load ($ tid)를 사용해야합니다.
JF Kiwad

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().

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.