Comment obtenir des valeurs de champ de paragraphe?

12

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
)
Jan F.
la source

Réponses:

13

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

Exemple:

use Drupal\paragraphs\Entity\Paragraph;

$paragraph = Paragraph::load($target_id);
$foo = $paragraph->field_name->value;
Kevin
la source
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
la source
9

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 entitypropriété. 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;
}

Il n'est donc pas nécessaire de charger une entité par l'ID d'entité, il vous suffit simplement d'utiliser la ->entitypropriété sur une liste référencée d'entités.

Claudiu Chirilov
la source