logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri
16/10/2025, by Ivan

Drupal Documentation

Recuperare i valori dei campi nelle entità è piuttosto semplice, ma ci sono diversi modi per farlo. Vediamo come lavorare al meglio con i valori dei campi nel codice personalizzato. Puoi sempre consultare le informazioni più aggiornate sulla gestione dei campi nel sito ufficiale:

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

In questo articolo analizzeremo alcuni esempi pratici di utilizzo dei valori dei campi.

Non è necessario ricordare a memoria come funzionano determinati campi: puoi sempre tornare su questa pagina per rinfrescarti la memoria. Col tempo, consulterai sempre più spesso la documentazione e capirai quanto sia semplice lavorare con i campi in Drupal. Nel frattempo, puoi aggiungere questa pagina ai preferiti come promemoria rapido.

Lavorare con i nodi

Caricare un nodo tramite il suo nid:

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

Ottenere l’ID del nodo:

$node->id();

Ottenere il bundle del nodo o dell’entità:

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

Ottenere i valori dei campi:

$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;

Puoi anche usare una sintassi abbreviata per ottenere i valori:

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

Caricare nodi specifici in base al valore di un 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', "Nuovo titolo per il nodo");
  $node->save();
}

Modificare i valori nei campi:

$node->set('title', "Nuovo titolo");
$node->set('body', array(
'summary' => "Introduzione",
'value' => "Testo completo",
'format' => 'basic_html',
));
$node->save();

Per i campi con un solo valore, puoi usare una forma ancora più breve:

$node->title = 'Nuovo titolo';
$node->field_text = 'testo';

Ottenere i valori di campi multipli:

$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']; // ottieni il fid del file
    $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,
  );
}

Lavorare con i campi file

I file vengono aggiunti alle altre entità tramite campi di riferimento e, accedendo a questi campi, possiamo ottenere l’ID del file e successivamente le sue informazioni.

Ottenere un file tramite ID:

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

Ottenere l’oggetto file da un campo del nodo:

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

Ottenere alcuni campi dell’oggetto file:

$file->getFileUri();   // "public://file123.jpg"
// Puoi convertire l’URI in URL: file_url_transform_relative(file_create_url($file->getFileUri()));   
// "/sites/default/files/public/file123.jpg"
$file->filename->value;   // "file123.jpg"
$file->filemime->value;   // "image/jpeg"
$file->filesize->value;   // 63518  (dimensione in byte)
$file->created->value;    // 1511206249  (timestamp Unix)
$file->changed->value;    // 1511234256  (timestamp Unix)
$file->id();

Puoi visualizzare i valori delle proprietà del file disponibili nella tabella file_managed come segue:

echo $file->uid->target_id;               // 1
echo $file->uid->value;                   // Non funziona! Usa target_id.
echo $file->uid->entity->name->value;    
echo $file->uid->entity->timezone->value; // "Asia/Omsk"

Lavorare con i campi di riferimento a entità

Puoi ottenere più valori da campi di riferimento a entità e gestirli con un ciclo foreach:

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

Modificare un campo di riferimento a entità multiplo:

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

Aggiungere nuovi valori a un campo di riferimento a entità mantenendo i valori esistenti:

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

Confrontare i valori vecchi e nuovi nei campi

La classe FieldItemListInterface (che sta dietro ogni campo) dispone del metodo equals():

/**
 * Implementa hook_entity_update().
 */
function mymodule_entity_update(\Drupal\Core\Entity\EntityInterface $entity) {
  // Verifica che l’entità abbia effettivamente il campo.
  if (!$entity->hasField('field_wikipage_access') || !isset($entity->original)) {
    return;
  }

  $new_values = $entity->get('field_wikipage_access');
  $old_values = $entity->original->get('field_wikipage_access');

  // Booleano rapido: cambiato o no?
  if ($new_values->equals($old_values)) {
    return;  // Nessuna modifica, esci.
  }

  // …altrimenti continua (vedi sotto).
}

Lavorare con i paragrafi

$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;
  
  print $my_paragraph->title->value;  // Non funziona!
} 
else {
  print "Il nodo non contiene questo tipo di paragrafo.";
}

Ottenere il tipo di paragrafo:

$my_paragraph->getType();

Utilizzeremo questi esempi in futuro per scrivere moduli personalizzati che lavorano con hook e oggetti entità.