จะรับค่าฟิลด์ย่อหน้าได้อย่างไร


12

ฉันต้องการสร้างรายการผลิตภัณฑ์ใน drupal และส่งไปที่เว็บเซอร์ สำหรับสิ่งนี้ฉันสร้างประเภทเอนทิตีพร้อมย่อหน้าสำหรับแต่ละผลิตภัณฑ์ ฉันจะโหลดย่อหน้าและเข้าถึงฟิลด์ได้อย่างไร จนถึงตอนนี้ฉันเห็นเฉพาะ target_id และ target_revision_id ของผลิตภัณฑ์ ขอบคุณ!

$nodestorage = \Drupal::entityManager()->getStorage('node');
$productslist = $nodestorage->loadUnchanged(9)->toArray();
foreach($productslist['field_products'] as $prod) {
  debug($prod);
}

ผลลัพธ์:

Array
(
  [target_id] => 1
  [target_revision_id] => 3
)

คำตอบ:


13

คุณควรจะสามารถรวมคลาสเอนทิตีของย่อหน้าและใช้Paragraph::load($entity_id)เพื่อโหลดได้

ตัวอย่าง:

use Drupal\paragraphs\Entity\Paragraph;

$paragraph = Paragraph::load($target_id);
$foo = $paragraph->field_name->value;

10
$paragraph = Paragraph::load($target_id);
// Paragraph type could be also useful.
$prgTypeId = $paragraph->getType();
/** @var \Drupal\Core\Field\EntityReferenceFieldItemList $prgMediaField */
$prgMediaField = $paragraph->get('field_media');
$prgMediaFieldValue = $prgMediaField->getValue();

9

ฉันรู้ว่ามันเก่า แต่อาจมีประโยชน์สำหรับอนาคต ในการโหลดเอนทิตีที่อ้างอิงโดยเอนทิตีโหนดคุณสามารถใช้entityคุณสมบัติ ตัวอย่างเช่นพิจารณารหัสต่อไปนี้:

$nodestorage = \Drupal::entityManager()->getStorage('node');
$node = $nodestorage->loadUnchanged(9);

foreach ($node->field_products as $product) {

  /** @var Entity (i.e. Node, Paragraph, Term) $referenced_product **/
  $referenced_product = $product->entity;

  // Use now the entity to get the values you need.
  $field_value = $referenced_product->field_name->value;
}

ดังนั้นไม่จำเป็นต้องโหลดเอนทิตีโดยรหัสเอนทิตีคุณเพียงแค่->entityคุณสมบัติผู้ใช้เหนือรายการเอนทิตีที่อ้างอิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.