Druplicon

Drupal 7: Obtener el valor del field de una entidad

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!

Comentarios

  1. Ricardo Sanz

    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!

    Responder ↓
  2. Ariel

    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

    Responder ↓
    1. Capy Autor

      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

      mimodulo_preprocess_page(&$vars){
          $entidadUsuario = entity_metadata_wrapper('user', 1);
          $muchos_apellidos = $entidadUsuario->field_apellidos->value();
          $apellidos = trim(implode(" ", $muchos_apellidos));
           
          //Me refiero a esto.
          $vars["apellidos"] = $apellidos;
      }
      
      Responder ↓

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>