จะโหลดเอนทิตีย่อหน้าบนวัตถุโหนดได้อย่างไร


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 ชื่อผู้ใช้ :: รหัสผ่านผู้ดูแลระบบ :: ผู้ดูแลระบบ
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 ('ย่อหน้า') -> 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.