Jak uzyskać wartości pól akapitu?

12

Chciałbym stworzyć listę produktów w Drupal i wysłać ją w serwisie internetowym. W tym celu utworzyłem typ jednostki z akapitami dla każdego produktu. Jak mogę załadować akapit i uzyskać dostęp do jego pól? Do tej pory widzę tylko target_id i target_revision_id produktu. Dzięki!

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

Wynik:

Array
(
  [target_id] => 1
  [target_revision_id] => 3
)
Jan F.
źródło

Odpowiedzi:

13

Powinno być możliwe włączenie klasy encji Akapit i użycie jej Paragraph::load($entity_id)do załadowania.

Przykład:

use Drupal\paragraphs\Entity\Paragraph;

$paragraph = Paragraph::load($target_id);
$foo = $paragraph->field_name->value;
Kevin
źródło
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();
Martin Klíma
źródło
9

Wiem, że to stare, ale może być pomocne na przyszłość. Aby załadować encje, do których odwołuje się encja Węzeł, możesz użyć tej entitywłaściwości. Weźmy na przykład następujący kod:

$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;
}

Więc nie ma potrzeby ładowania encji według identyfikatora encji, wystarczy po prostu ->entitywłaściwość użytkownika nad listą encji, do której się odwołuje.

Claudiu Chirilov
źródło