Har*_*bra 4 php drupal content-management-system drupal-7
我一直在Drupal 7中使用此代码来获取节点字段的值:
$node = node_load($nid);
$rate = $node->field_rate[und][0][value];
Run Code Online (Sandbox Code Playgroud)
如何在$rate
不使用这种长数组语法的情况下获得价值?
经过研究我得到了
$field = field_get_items('node', $node, 'field_rate')
$rate = $field[0]['value'];
Run Code Online (Sandbox Code Playgroud)
但是如果我需要获得n
多个字段,它仍然很长.
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;
}
Run Code Online (Sandbox Code Playgroud)
示例:
$field = multi_field_get_items('node', $node, array('field_rate'));
var_dump($field); // array('field_rate' => 'value of field rate');
Run Code Online (Sandbox Code Playgroud)
如果是集合,它将返回:
array('field_rate' => array('value of field rate 1', 'value of field_rate 2'));
Run Code Online (Sandbox Code Playgroud)