Як завантажити сутність абзацу на об’єкт вузла?


12

Я використовую абзаци в моєму типі вмісту. Я створив тип абзацу та додав вміст. Тепер я хочу завантажити абзаци в foreach. Але нічого не виявляється. $parasпусто:

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

Ви сказали, що $ para показують порожніми. але ви не показали, як ви надрукували його значення. Це 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 :: entitManager () -> 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().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.