Come caricare l'entità paragrafo sull'oggetto nodo?


12

Sto usando i paragrafi nel mio tipo di contenuto. Ho creato un tipo di paragrafo e aggiunto contenuti. Ora voglio caricare i paragrafi in a foreach. Ma non viene visualizzato nulla. $parasè vuoto:

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

Hai detto $ par mostrando vuoto. ma non hai mostrato come hai stampato il suo valore. È un NULLvalore, una stringa vuota o un array vuoto? Dato che hai commentato l' ho già fatto, ma la tua risposta è giusta per la risposta, che mostra un codice completamente diverso, la tua domanda diventa un po 'confusa e non è chiaro cosa non sei in grado di ottenere.
kiamlaluno

Questa domanda è stata posta quando sono molto nuovo in Drupal 8 mentre faccio attività per l'apprendimento. Penso di fare qualche errore nel processo in modo che il tempo appaia vuoto. Ma quando faccio lo stesso ora funziona bene. controlli qui una demo esegui lo stesso codice. Ho appena creato questo per te, d2log.ply.st/devel/php username :: admin password :: admin
Pankaj Yogi

Risposte:


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

L'ho già fatto ma la tua risposta è giusta.
Pankaj Yogi,

Fai attenzione: questa soluzione non include le traduzioni.
ssibal,

Invece del paragrafo :: load ($ tid), ora dovremmo usare \ Drupal :: entityManager () -> getStorage ('paragraph') -> load ($ tid).
JF Kiwad,

6

Sostituisci semplicemente get()con il nome del campo direttamente:

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

Wow, sì, ma perché?
leymannx,

0

Questo metodo funzionerà un po 'più veloce.

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

È inoltre possibile implementare facilmente questo codice in alcuni metodi nel servizio personalizzato con @entity_type.managerargomento e caricare l'archiviazione per nodi e paragrafi in __construct().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.