¿Cómo obtener valores de campo de párrafo?

12

Me gustaría crear una lista de productos en drupal y enviarla en un servicio web. Para esto, creé un tipo de entidad con párrafos para cada producto. ¿Cómo puedo cargar el párrafo y acceder a sus campos? Hasta ahora solo veo el target_id y target_revision_id del producto. ¡Gracias!

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

Resultado:

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

Respuestas:

13

Debería poder incluir la clase de entidad Párrafo y utilizarla Paragraph::load($entity_id)para cargarla.

Ejemplo:

use Drupal\paragraphs\Entity\Paragraph;

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

Sé que esto es viejo, pero podría ser útil para el futuro. Para cargar entidades a las que hace referencia una entidad de nodo, puede usar la entitypropiedad Por ejemplo, considere el siguiente código:

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

Por lo tanto, no es necesario cargar una entidad por la identificación de la entidad, simplemente usa la ->entitypropiedad del usuario sobre una lista referenciada de entidades.

Claudiu Chirilov
fuente