web-dev-qa-db-fra.com

Comment obtenir des valeurs de champ de paragraphe?

Je voudrais créer une liste de produits dans drupal et l'envoyer dans un webservice. Pour cela, j'ai créé un type d'entité avec des paragraphes pour chaque produit. Comment puis-je charger le paragraphe et accéder à ses champs ? Jusqu'à présent, je ne vois que les target_id et target_revision_id du produit. Merci!

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

Résultat:

Array
(
  [target_id] => 1
  [target_revision_id] => 3
)
12
Jan F.

Vous devriez pouvoir inclure la classe d'entité Paragraph et utiliser Paragraph::load($entity_id) pour la charger.

Exemple:

use Drupal\paragraphs\Entity\Paragraph;

$paragraph = Paragraph::load($target_id);
$foo = $paragraph->field_name->value;
14
Kevin
$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();
10
Martin Klíma

Je sais que c'est vieux, mais cela pourrait être utile pour l'avenir. Pour charger des entités référencées par une entité Node, vous pouvez utiliser la propriété entity. Par exemple, considérez le code suivant:

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

Donc, pas besoin de charger une entité par l'ID d'entité, il vous suffit simplement d'utiliser ->entity propriété sur une liste d'entités référencée.

9
Claudiu Chirilov