Como obter valores de campo de parágrafo?

12

Gostaria de criar uma lista de produtos no drupal e enviá-la em um serviço da web. Para isso, criei um tipo de entidade com parágrafos para cada produto. Como posso carregar o parágrafo e acessar seus campos? Até agora, vejo apenas o target_id e target_revision_id do produto. Obrigado!

$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.
fonte

Respostas:

13

Você deve poder incluir a classe de entidade Parágrafo e usá Paragraph::load($entity_id)-la para carregá-la.

Exemplo:

use Drupal\paragraphs\Entity\Paragraph;

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

Sei que isso é antigo, mas pode ser útil para o futuro. Para carregar entidades referenciadas por uma entidade Node, você pode usar a entitypropriedade Por exemplo, considere o seguinte 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;
}

Portanto, não há necessidade de carregar uma entidade pelo ID da entidade, você simplesmente usa a ->entitypropriedade sobre uma lista referenciada de entidades.

Claudiu Chirilov
fonte