Astuce Drupal 7 : Obtenir les valeurs des champs à partir d'objets entité comme les nœuds, les utilisateurs, la taxonomie, ...

Cette petite astuce Drupal 7 vous aidera à obtenir les valeurs des objets d'entité, comme des noeuds, les utilisateurs, la taxonomie, ...

Vous avez probablement vu cette structure de données lors du chargement des nœuds:

<?php
$entity 
->fieldname[language][delta] = [item];
?>

Vous pouvez l'utiliser dans des boucles, mais la langue ne sera pas prise en compte. Il y a une fonction qui extrait des données, ainsi vous n'avez plus à vous soucier de la langue des structures de données:

<?php
$items 
field_get_items('node'$node'field_yourfield'$node->language);
?>

Pour plus d'information:
http://api.drupal.org/api/drupal/modules--field--field.module/group/field/7

Editer:
Ceci est aussi une fonction très utile trouvée sur le blog drupal7ish
http://drupal7ish.blogspot.com/2011/03/getting-field-data-out-of-entitie...

<?php
/**
 * Renvoie les valeurs de champ comme des entités réelles si possible,
 * Permet également la sélection des éléments individuels à être renvoyé
 */
function field_fetch_field_values($entity_type$entity$field_name$get_delta NULL$get_key NULL) {
  
$values = array();
  if (isset(
$entity->$field_name) && !empty($entity->$field_name)) {
    foreach (
field_get_items($entity_type$entity$field_name) as $delta => $item) {
      
$value $item;
      
$keys array_keys($item);
      if (
count($keys)==1) {
        
$key $keys[0];
        switch (
$key) {
          case 
'nid':
            
$value array_shift(entity_load('node', array($item[$key])));
            break;
          case 
'uid':
            
$value array_shift(entity_load('user', array($item[$key])));
            break;
          case 
'tid':
            
$value array_shift(entity_load('taxonomy_term', array($item[$key])));
            break;
          case 
'vid':
            
$value array_shift(entity_load('taxonomy_vocabulary', array($item[$key])));
            break;
          case 
'value':
            
$value $item['value'];
            break;
        }
      }
      else {
        if (
$get_key && isset($item[$get_key])) {
          
$value $item[$get_key];
        }
        elseif (
array_key_exists('value'$item)) {
          
$value = isset($item['safe_value']) ? $item['safe_value'] : $item['value'];
        }
      }
      
$values[$delta] = $value;
    }
  }
  if (
is_numeric($get_delta)) {
    return isset(
$values[$get_delta]) ? $values[$get_delta] : NULL;
  }
  return 
$values;
}
?>