2017-07-28 54 views
4

我一直使用Drupal 7的这个代码来获得一个节点的字段的值:最短的代码,以找到任何节点的字段值在Drupal

$node = node_load($nid); 
$rate = $node->field_rate[und][0][value]; 

如何获得$rate值,而不使用这种多头排列语法?

研究后,我得到

$field = field_get_items('node', $node, 'field_rate') 
$rate = $field[0]['value']; 

但它仍然很长,如果我需要得到n许多领域。

+0

'field_get_items'是获得一个最好的方法价值,因为它为你管理语言。如果您需要获取多个字段的值,则必须在循环中使自定义函数使用'field_get_items' – Fky

回答

5

field_get_items是获取价值的最佳方式,因为它为您管理语言。否则,如果你想要更多的字段,你可以做一个SQL查询。你还可以创建这样的自定义函数:

/** 
    * @param  $entity_type 
    * @param  $entity 
    * @param array $field_names // field_names 
    * @param null $langcode 
    * @return array 
    */ 
function multi_field_get_items($entity_type, $entity, $field_names = array(), $langcode = NULL){ 
    $field_values = array(); 
    foreach ($field_names as $field_name){ 
    $data = field_get_items($entity_type, $entity, $field_name, $langcode); 
    if(is_array($data) && count($data) > 1){ 
     foreach ($data as $several_values) { 
     $field_values[ $field_name ][] = current($several_values); 
     } 
    }else if(is_array($data) && count($data) == 1){ 
     $field_values[ $field_name ] = current(current($data)); 
    } else { 
     $field_values[ $field_name ] = null; 
    } 
    } 
    return $field_values; 
} 

例子:

$field = multi_field_get_items('node', $node, array('field_rate')); 

var_dump($field); // array('field_rate' => 'value of field rate'); 

如果是一个集合,它将返回:

array('field_rate' => array('value of field rate 1', 'value of field_rate 2')); 
相关问题