Как получить значения полей абзаца?


Я хотел бы создать список продуктов в 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
)
Author: Jan F., 2017-02-28

3 answers

Вы должны иметь возможность включить класс сущностей Paragraph и использовать Paragraph::load($entity_id) для его загрузки.

Пример:

use Drupal\paragraphs\Entity\Paragraph;

$paragraph = Paragraph::load($target_id);
$foo = $paragraph->field_name->value;
 14
Author: Kevin, 2018-11-02 17:32:46
$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
Author: Martin Klíma, 2017-04-20 10:16:14

Я знаю, что это старое, но может быть полезно в будущем. Для загрузки сущностей, на которые ссылается сущность узла, вы можете использовать свойство 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 над списком объектов, на которые есть ссылки.

 9
Author: Claudiu Chirilov, 2017-12-01 12:59:31