Làm thế nào để tải thực thể đoạn trên đối tượng nút?


12

Tôi đang sử dụng các đoạn văn trong loại nội dung của tôi. Tôi đã tạo một loại đoạn văn và thêm nội dung. Bây giờ tôi muốn tải các đoạn văn trong a foreach. Nhưng không có gì hiển thị. $parastrống rỗng:

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

Bạn nói $ paras hiển thị trống. nhưng bạn đã không cho thấy cách bạn in giá trị của nó. Nó là một NULLgiá trị, một chuỗi rỗng hay một mảng trống? Vì bạn đã nhận xét với tôi đã làm điều này nhưng câu trả lời của bạn là đúng với câu trả lời đang hiển thị mã hoàn toàn khác nhau, câu hỏi của bạn có một chút bối rối và không rõ bạn không thể đạt được điều gì.
kiamlaluno

Câu hỏi này được hỏi khi tôi còn rất mới trong drupal 8 đang thực hiện nhiệm vụ học tập. Tôi nghĩ rằng tôi đã thực hiện một số lỗi trong quá trình để thời gian đó hiển thị trống. Nhưng khi tôi làm như vậy thì nó vẫn hoạt động tốt. bạn kiểm tra ở đây một bản demo chạy cùng mã. Tôi chỉ tạo cái này cho bạn, d2log.ply.st/devel/php tên người dùng :: mật khẩu quản trị viên :: quản trị viên
Pankaj Yogi

Câu trả lời:


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

Tôi đã làm điều này nhưng câu trả lời của bạn là đúng.
Pankaj Yogi

Hãy cẩn thận: giải pháp này không bao gồm các bản dịch.
ssibal

Thay vì Par Đoạn :: load ($ tid), bây giờ chúng ta nên sử dụng \ Drupal :: entityManager () -> getStorage ('đoạn') -> load ($ tid).
JF Kiwad

6

Chỉ cần thay thế get()bằng tên trường trực tiếp:

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

Wow, vâng, nhưng tại sao?
leymannx

0

Phương pháp này sẽ hoạt động nhanh hơn một chút.

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

Bạn cũng có thể dễ dàng triển khai mã này trong một số phương thức trong dịch vụ tùy chỉnh của mình với @entity_type.managerđối số và lưu trữ tải cho các nút và đoạn văn bản trong __construct().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.