¿Cómo cargar la entidad de párrafo en el objeto de nodo?


12

Estoy usando párrafos en mi tipo de contenido. Creé un tipo de párrafo y agregué contenido. Ahora quiero cargar los párrafos en a foreach. Pero no aparece nada. $parasesta vacio:

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

Dijiste $ paras mostrando en blanco. pero no mostraste cómo imprimiste su valor. ¿Es un NULLvalor, una cadena vacía o una matriz vacía? Como ya comentaste que ya hice esto, pero tu respuesta es la correcta , que muestra un código completamente diferente, tu pregunta se confunde un poco y no está claro lo que no puedes lograr.
kiamlaluno

Esta pregunta se hizo cuando soy muy nuevo en drupal 8 haciendo tareas para aprender. Creo que hago un error en el proceso para que se muestre en blanco. Pero cuando hago lo mismo ahora funciona bien. Marque aquí una demostración ejecute el mismo código. Acabo de crear esto para usted, d2log.ply.st/devel/php nombre de usuario :: contraseña de administrador :: admin
Pankaj Yogi

Respuestas:


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

Ya hice esto pero tu respuesta es correcta.
Pankaj Yogi

Tenga cuidado: esta solución no incluye traducciones.
ssibal

En lugar de Paragraph :: load ($ tid), ahora deberíamos usar \ Drupal :: entityManager () -> getStorage ('párrafo') -> load ($ tid).
JF Kiwad

6

Simplemente reemplace get()con el nombre del campo directamente:

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

Wow, sí, pero ¿por qué?
leymannx

0

Este método funcionará un poco más rápido.

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

También puede implementar fácilmente este código en algún método en su servicio personalizado con @entity_type.managerargumento y almacenamiento de carga para nodos y párrafos __construct().

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.