如何在drupal中连接变量

时间:2015-11-25 11:28:07

标签: php drupal drupal-modules custom-post-type

我想知道如何连接 [und] [0] [value] 。 我不想每次都写[und] [0] [value]。所以我这样做了:

   <?php

   $und_value = $load->field_testimonial_location['und'][0]['value'];

   $query = db_select('node','n');
   $query->fields('n',array('nid'));
   $query->condition('n.type','testimonial','=');
   $result = $testimonial_query->execute();

   while($fetch = $result->fetchObject()){

    $load = node_load($fetch->nid);
    // $location = $load->field_testimonial_location['und'][0]['value']; 
    $location = $load->field_testimonial_location.$und_value;
    echo $location;
   }

但它不起作用。它输出数组数组那么有这个问题的idia吗?我能怎么做? Full code here

3 个答案:

答案 0 :(得分:0)

为什么不制作一些将节点字段作为参数并返回其值

的函数
result[5] = '5-B';
result[6] = '6-b';
// etc...

类似的东西(未经测试)。

但如果您不想使用函数,请尝试使用大括号,如:

function field_value($field){
  return $field['und'][0]['value'];
}

这应该有用......

答案 1 :(得分:0)

扩展MilanG发布的答案,使功能更通用

function field_value($field, $index = 0 ){ return $field['und'][$index]['value']; }

有时候你有多个值字段,在这种情况下你也必须传递值的索引。例如

$field['und'][3]['value'];

答案 2 :(得分:0)

请不要使用这些缩写,它们不适合所有情况,最终会破坏您的代码。

相反,已经有一个工具可以使用更简单的语法创建自定义代码:Entity Metadata Wrapper

基本上,而不是

$node = node_load($nid);
$field_value = $node->field_name['und'][0]['value'];
然后,您可以执行类似

的操作
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$field_value = $node_wrapper->field_name->value();

使用节点包装器,您还可以设置节点的值,它更容易,甚至可以在多语言环境中工作,无需先获取语言($node->language)或使用常量(LANGUAGE_NONE

在我的自定义模块中,我经常使用$node作为节点对象,使用$enode作为包装器对象。它同样简短,仍然知道我正在研究的对象。