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
)

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;

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();

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.