Ja vam veure en un altre article com carregar un node pel seu ID, però ara necessitem saber com obtenir els valors dels seus camps.
És molt senzill — només necessites saber que l’objecte node té el mètode get, que ens permet obtenir aquests camps (atributs).
És important notar que aquests camps també són objectes en si mateixos, cadascun amb els seus propis atributs, depenent del tipus de camp. Pots esbrinar quins atributs estan disponibles depurant amb Xdebug (recomanat) o imprimint la variable usant Kint o dump().
Usant el mètode get()
echo $node->get('title')->value; // "Lorem Ipsum..."
echo $node->get('created')->value; // 1510948801
echo $node->get('body')->value; // "El body complet, <strong>amb HTML</strong>"
echo $node->get('body')->summary; // "El resum"
// Un camp de text
echo $node->get('field_foo')->value; // "El que sigui que tingui el teu camp personalitzat"
// Un camp de fitxer
echo $node->get('field_image')->target_id; // 432 (El File ID)
Usant mètodes màgics (forma abreujada)
Amb els mètodes màgics de PHP, ni tan sols necessites escriure get. Així que l’equivalent de l’anterior seria:
echo $node->title->value; // "Lorem Ipsum..."
echo $node->created->value; // 1510948801
echo $node->body->value; // "El body complet, <strong>amb HTML</strong>"
echo $node->body->summary; // "El resum"
echo $node->field_foo->value; // "El que sigui que tingui el teu camp personalitzat"
echo $node->field_image->target_id; // 432
Tots dos enfocaments funcionen exactament igual. Usa el que prefereixis.
Tipus de camp comuns i les seves propietats
| Tipus de camp | Com obtenir el valor |
|---|---|
| Text / String | ->value |
| Text with summary | ->value, ->summary, ->format |
| Integer / Float | ->value |
| Boolean | ->value (retorna 0 o 1) |
| Date | ->value (string en format ISO) |
| Entity reference | ->target_id, ->entity |
| Link | ->uri, ->title |
| File / Image | ->target_id, ->alt, ->title, ->entity |
Treballant amb referències a entitats
Quan tens un camp de referència (com Media, Term o User), pots obtenir l’ID o l’entitat completa:
// Obtenir només l'ID
$media_id = $node->get('field_image')->target_id;
// Obtenir l'entitat referenciada completa
$media = $node->get('field_image')->entity;
$file_url = $media->get('field_media_image')->entity->getFileUri();
Comprovar si un camp té valor
Sempre comprova abans d’accedir per evitar errors:
if (!$node->get('field_foo')->isEmpty()) {
$value = $node->get('field_foo')->value;
}
Camps multivalor
Per a camps que poden tenir múltiples valors:
// Obtenir tots els valors
foreach ($node->get('field_tags') as $item) {
echo $item->target_id;
}
// Obtenir només el primer valor
$first = $node->get('field_tags')->first();
// Obtenir com a array
$values = $node->get('field_tags')->getValue();
getValue() i getString()
Dos mètodes molt útils que funcionen en qualsevol camp:
// getValue() - Retorna l'estructura d'array crua
$node->get('field_foo')->getValue();
// Retorna: [['value' => 'el meu text']]
// Per a un camp multivalor:
// Retorna: [['value' => 'primer'], ['value' => 'segon']]
// getString() - Retorna una representació en string pla
$node->get('field_foo')->getString();
// Retorna: "el meu text"
// Per a referències a entitats, getString() retorna l'ID
$node->get('field_tags')->getString();
// Retorna: "15" (o "15, 23, 42" per a multivalor)
getValue() és útil quan necessites l’estructura de dades completa, especialment per a camps complexos o quan passes dades a una API.
getString() és pràctic per a depuració ràpida o quan només necessites una sortida de string simple.
Mètodes helper per a camps comuns
Alguns camps base tenen mètodes getter dedicats:
$node->getTitle(); // Igual que $node->title->value
$node->getCreatedTime(); // Igual que $node->created->value
$node->getOwnerId(); // Igual que $node->uid->target_id
$node->isPublished(); // Retorna boolean
$node->bundle(); // Retorna el machine name del tipus de contingut
Aquests mètodes són més nets i recomanats quan estan disponibles.
Què és Drupal modern?
Quan diem “Drupal modern” ens referim a Drupal 10, 11 i versions futures. Aquestes versions comparteixen la mateixa API d’entitats i sistema de camps, així que tot el que s’explica en aquest article aplica a totes elles.
Drupal 7 i anteriors usaven un enfocament completament diferent. Drupal 8 i 9 van introduir el sistema actual, però ja no tenen suport. Per això ens centrem en Drupal 10+ com a "Drupal modern".