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