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>