Jak załadować encję akapitu na obiekt węzła?


12

Używam akapitów w moim typie treści. Utworzyłem typ akapitu i dodałem treść. Teraz chcę załadować akapity w foreach. Ale nic się nie pojawia. $parasjest pusty:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();

Powiedziałeś $ paras pokazując puste. ale nie pokazałeś, jak wydrukowałeś jego wartość. Czy jest to NULLwartość, pusty ciąg, czy pusta tablica? Ponieważ skomentowałeś już to zrobiłem, ale twoja odpowiedź jest właściwa do odpowiedzi, która pokazuje zupełnie inny kod, twoje pytanie jest trochę zagmatwane i nie jest jasne, czego nie jesteś w stanie osiągnąć.
kiamlaluno

To pytanie zadane, gdy jestem bardzo nowy w Drupal 8, wykonuję zadanie uczenia się. Myślę, że popełniam pewien błąd w procesie, więc czas pokazuje się pusty. Ale kiedy robię to samo, teraz działa dobrze. sprawdzasz tutaj wersję demonstracyjną uruchamiającą ten sam kod. Po prostu tworzę to dla ciebie, d2log.ply.st/devel/php nazwa użytkownika :: hasło administratora :: admin
Pankaj Yogi

Odpowiedzi:


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();
}

Już to zrobiłem, ale twoja odpowiedź jest prawidłowa.
Pankaj Yogi

Uważaj: to rozwiązanie nie obejmuje tłumaczeń.
ssibal

Zamiast akapitu :: load ($ tid), powinniśmy teraz użyć \ Drupal :: entityManager () -> getStorage ('akapit') -> load ($ tid).
JF Kiwad

6

Wystarczy zastąpić get()bezpośrednio nazwą pola:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();

Wow, tak, ale dlaczego?
leymannx,

0

Ta metoda będzie działać nieco szybciej.

// 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...
  }
}

Możesz również łatwo zaimplementować ten kod w dowolnej metodzie w usłudze niestandardowej za pomocą @entity_type.managerargumentów i pamięci masowej dla węzłów i akapitów w __construct().

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.