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;
}
?>Submitted by Dominique De Cooman on Mon, 2011-06-20 10:00

