Wie erhält man Absatzfeldwerte?

12

Ich möchte eine Produktliste in Drupal erstellen und sie in einem Webservice senden. Zu diesem Zweck habe ich für jedes Produkt einen Entitätstyp mit Absätzen erstellt. Wie kann ich den Absatz laden und auf seine Felder zugreifen? Bisher sehe ich nur die target_id und target_revision_id des Produkts. Vielen Dank!

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

Ergebnis:

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

Antworten:

13

Sie sollten in der Lage sein, die Paragraph-Entitätsklasse einzuschließen und Paragraph::load($entity_id)zum Laden zu verwenden.

Beispiel:

use Drupal\paragraphs\Entity\Paragraph;

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

Ich weiß, dass dies alt ist, aber für die Zukunft hilfreich sein könnte. Mit der entityEigenschaft können Sie Entitäten laden, auf die von einer Knotenentität verwiesen wird . Betrachten Sie beispielsweise den folgenden Code:

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

Es ist also nicht erforderlich, eine Entität anhand der Entitäts-ID zu laden. Sie müssen lediglich die Benutzereigenschaft ->entityüber eine referenzierte Liste von Entitäten legen.

Claudiu Chirilov
quelle