Wie lade ich eine Absatzeinheit auf ein Knotenobjekt?

12

Ich verwende Absätze in meinem Inhaltstyp. Ich habe einen Absatztyp erstellt und Inhalt hinzugefügt. Jetzt möchte ich die Absätze in a laden foreach. Aber es zeigt sich nichts. $parasist leer:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();
Pankaj Yogi
quelle
Du hast gesagt, dass $ paras leer sind. aber Sie haben nicht gezeigt, wie Sie den Wert gedruckt haben. Ist es ein NULLWert, eine leere Zeichenfolge oder ein leeres Array? Da Sie dies mit " Ich habe es bereits getan" kommentiert haben, aber Ihre Antwort stimmt mit der Antwort überein, die einen völlig anderen Code enthält, wird Ihre Frage etwas verwirrt und es ist nicht klar, was Sie nicht erreichen können.
kiamlaluno
Diese Frage wurde gestellt, wenn ich sehr neu in Drupal 8 bin und eine Lernaufgabe erledige. Ich glaube, ich mache einen Fehler im Prozess, sodass er dieses Mal leer bleibt. Aber wenn ich das gleiche mache, funktioniert er jetzt gut. Sie überprüfen hier eine Demo mit dem gleichen Code. Ich erstelle dies nur für dich, d2log.ply.st/devel/php Benutzername :: admin Passwort :: admin
Pankaj Yogi

Antworten:

23
$paragraph = $node->field_paragraph->getValue();
// Loop through the result set.
foreach ( $paragraph as $element ) {
  $p = \Drupal\paragraphs\Entity\Paragraph::load( $element['target_id'] );
  $text = $p->field_name->getValue();
}
Tim Ahmedov
quelle
Ich habe das schon getan, aber deine Antwort ist richtig.
Pankaj Yogi
Achtung: Diese Lösung enthält keine Übersetzungen.
ssibal
Anstelle von Paragraph :: load ($ tid) sollten wir jetzt \ Drupal :: entityManager () -> getStorage ('paragraph') -> load ($ tid) verwenden.
JF Kiwad
6

Einfach get()direkt durch den Feldnamen ersetzen :

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();
Ken
quelle
Wow, ja, aber warum?
Leymannx
0

Diese Methode wird etwas schneller funktionieren.

// Get data from field.
if ($paragraph_field_items = $node->get('field_paragraph')->getValue()) {
  // Get storage. It very useful for loading a small number of objects.
  $paragraph_storage = \Drupal::entityTypeManager()->getStorage('paragraph');
  // Collect paragraph field's ids.
  $ids = array_column($paragraph_field_items, 'target_id');
  // Load all paragraph objects.
  $paragraphs_objects = $paragraph_storage->loadMultiple($ids);
  /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
  foreach ($paragraphs_objects as $paragraph) {
    // Get field from the paragraph.
    $text = $paragraph->get('field_title')->value;
    // Do something with $text...
  }
}

Sie können diesen Code auch problemlos in einer Methode in Ihrem benutzerdefinierten Dienst mit @entity_type.managerArgument- und Ladespeicher für Knoten und Absätze in implementieren __construct().

Arraksis
quelle