Como ya sabemos de sobra, en Drupal 7 todo es una entity (aka entidad). Los nodos son entidades, los comentarios son entidades, las taxonomias, los usuarios, todo es una entidad, y las entidades usan fields, y obtener el valor de un field de una entidad programaticamente es algo que no suele estar muy claro.
Hoy vamos a ver dos formas de obtener el valor de un field en una entidad.
Nuestro conejillo de indias: una entidad User que tiene un field llamado “field_apellidos“.
La primer forma de obtener el valor que guarda “field_apellido” es usando la API de drupal directamente:
<?php
$user = user_load(1);
$apellidos = field_get_items('user', $user, 'field_apellidos');
echo $apellidos[0]["value"];
?>
Y en el caso de que sea de múltiples valores:
<?php
$user = user_load(1);
$muchos_apellidos = field_get_items('user', $user, 'field_apellidos');
foreach($muchos_apellidos as $apellido){
$apellidos[] = $apellido["value"];
}
$apellidos = trim(implode(" ", $apellidos));
?>
La segunda forma es usando Entity API (y para quien no lo conozca créanme que es tan necesario como ctools, views o panels si te dedicas a la programación en Drupal 7):
<?php
$user = user_load(1);
$entidadUsuario = entity_metadata_wrapper('user', $user);
$apellidos = $entidadUsuario->field_apellidos->value();
echo $apellidos;
?>
Y en el caso de que sea de múltiples valores:
<?php
$user = user_load(1);
$muchos_apellidos = $entidadUsuario->field_apellidos->value();
$apellidos = trim(implode(" ", $muchos_apellidos));
?>
Nota final: Solo con hacer user_load() ya tenes disponibles el field_apellidos, pero no es una practica recomendada accederlo directamente.
Chau!
Y en el último ejemplo incluso sobra el user_load, se puede obtener el wrapper simplemente pasándole el identificador de la entidad (en este caso el uid del usuario):
$entidadUsuario = entity_metadata_wrapper('user', 1);
¡Entidades al poder!
Muy cierto Ricardo
Hola desde Cuba Capy!!! Feliz Nuevo Año!
HAce rato ando buscando este codigo para sacar un field de user, pero he probado usando Entity API como recomiendas y me funciona, pero quisiera mostrar $apellidos en page.tpl.php. No me funciona $variables[“apellidos”], ni directamente $apellidos. Debo hacer algo para que se vea esa variable en la plantilla.
OJO tu codigo lo puse en theme_preprocess_page
Gracias de antemano
Ariel
Hola Ariel. Respondo tarde pero espero que le sirva a alguien.
Lo único que se me ocurre que pueda faltar en esa situación es que pases el apellido a la plantilla por medio de $vars