2017-07-28 53 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')); 
相關問題