Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll
04/05/2025, by Ivan

Drupal Documentation

Recuperar valores de campos en entidades es bastante simple, pero existen varias formas de hacerlo. Veamos cuál es la mejor manera de trabajar con valores de campos en código personalizado. Siempre puedes consultar la información más reciente en el sitio oficial:

https://www.drupal.org/docs/8/api/entity-api/working-with-the-entity-api

En este artículo veremos ejemplos de trabajo con valores de campos. Puedes volver a esta página en cualquier momento como una guía rápida.

Trabajando con nodos

Cargar un nodo por su nid:

$nid = 234; 
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);

Obtener el ID del nodo:

$node->id();

Obtener el bundle del nodo/entidad:

$node->bundle();   
$entity->getType(); 

Obtener valores de campos:

$node->get('title')->value;           
$node->get('created')->value;      
$node->get('body')->value;          
$node->get('body')->summary;         
$node->get('field_foo')->value;     
$node->get('field_image')->target_id;

También puedes usar una sintaxis corta:

$node->title->value;
$node->created->value;
$node->body->value;
$node->body->summary;
$node->field_foo->value;
$node->field_image->target_id;

Cargar nodos específicos por valor de campo:

$query = \Drupal::entityQuery('node')
  ->condition('type', 'article')
  ->condition('field_terms', 42);
$nids = $query->execute();
$nodes = $node_storage->loadMultiple($nids);
  
foreach ($nodes as $node) {
  print $node->title->value;
  $node->set('title', "Nuevo título para el nodo");
  $node->save();
}

Modificar valores de campos:

$node->set('title', "Nuevo título");
$node->set('body', array(
  'summary' => "Resumen",
  'value' => "Texto largo",
  'format' => 'basic_html',
));
$node->save();

También puedes usar una sintaxis corta para campos de valor único:

$node->title = 'Nuevo título';
$node->field_text = 'texto';

Obtener valores de campos múltiples:

$nids = \Drupal::entityQuery('node')->condition('type', 'album')->execute();
$nodes = Node::loadMultiple($nids);

$data = array();
foreach($nodes as $node) {
  $photo = array();
  foreach($node->get('field_image')->getValue() as $file){
    $fid = $file['target_id'];
    $photo[] = \Drupal\file\Entity\File::load($fid)->getFileUri();
  }

  $data[] = array(
    'album_name' => $node->get('field_album_name')->getValue(),
    'place' => $node->get('field_place')->getValue(),
    'author' => $node->get('field_author')->getValue(),
    'photo' => $photo,
  );
}

Trabajando con campos de archivo

Los archivos se agregan mediante campos de referencia. Para acceder al archivo, primero obtenemos el ID y luego la entidad de archivo.

Obtener archivo por ID:

$fid = 42; 
$file_storage = \Drupal::entityTypeManager()->getStorage('file');
$file = $file_storage->load($fid);

Obtener archivo desde campo de nodo:

$file = $node->field_image->entity;

Obtener propiedades del archivo:

$file->getFileUri();
file_url_transform_relative(file_create_url($file->getFileUri()));
$file->filename->value;
$file->filemime->value;
$file->filesize->value;
$file->created->value;
$file->changed->value;
$file->id();

También puedes consultar propiedades de la entidad de usuario que subió el archivo:

echo $file->uid->target_id;
echo $file->uid->entity->name->value;
echo $file->uid->entity->timezone->value;

Trabajando con campos de referencia a entidades

Recorrer valores múltiples de referencia:

foreach ($node->field_my_entity_reference as $reference) {  
  print $reference->target_id;  
  print $reference->entity->title->value;  
}

Modificar campo de referencia múltiple:

$nids = [3,4,5,6];  
$node->set('field_my_entity_reference', $nids);
$node->save();

Añadir valores adicionales al campo:

$nids = [3,4,5,6];
foreach ($nids as $nid) {
  $node->field_my_entity_reference[] = [
    'target_id' => $nid
  ];
}
$node->save();

Trabajando con párrafos

$my_paragraph = null;

foreach ($node->get('field_paragraph_reference') as $paragraph) {
  if ($paragraph->entity->getType() == 'your_paragraph_type') {
    $my_paragraph = $paragraph->entity;
  }
}

if (!empty($my_paragraph)) {
  print $my_paragraph->field_somefield->value;
} 
else {
  print "El nodo no tiene este tipo de párrafo.";
}

Obtener el tipo de párrafo:

$my_paragraph->getType();

Utilizaremos estos ejemplos más adelante al escribir módulos personalizados que trabajen con hooks y objetos de entidad.