drupal 7计算字段返回未定义的索引

时间:2011-09-25 18:39:47

标签: drupal-7

好的,两小时后现在挣扎了 - 我仍然无法得到它。

我正在尝试使用计算字段对一个节点的所有五星评级进行平均。但我正在努力简单地使用实体访问其他领域!

在节点的主体中,这很好用:

$test1 = $node->field_ae_stimclasswrk[und][0]['average'];

但在计算字段区域中,这不起作用:

$entity_field[0]['value'] = $entity->field_ae_stimclasswrk[$entity->language]    [und][0]['average'];

相反,当我保存节点时,我得到了这个索引错误:

注意:未定义的索引:在eval()中的und(...的第2行

它必须是语法,但我完全没有想法。

这是字段信息:

   [field_ae_stimclasswrk] => Array
        (
            [und] => Array
                (
                    [0] => Array
                            (
                            [user] => 80
                            [average] => 80
                            [count] => 1
                        )

                )

       )

2 个答案:

答案 0 :(得分:2)

代码中的一个小错误:

$entity->field_ae_stimclasswrk[$entity->language][und][0]['average'];

如果仔细观察,您实际上是尝试访问该字段的语言元素两次,一次使用$entity->language,一次使用und

最好保持代码上下文,以便删除代码中的[und]项:

$entity->field_ae_stimclasswrk[$entity->language][0]['average'];

答案 1 :(得分:1)

我遇到了同样的问题。它实际上是由$entity->field_ref[$entity->language]内不存在的索引引起的。

对我来说,$entity->field_ref[$entity->language]存在于所有节点,但当你在其中添加一个索引时,它会导致任何不使用该字段的节点出现问题。

$entity->field_ref[$entity->language][0]导致了这个问题(请注意添加[0]索引)。

要解决您的问题,您可以尝试:

$test1 = (isset($node->field_ae_stimclasswrk[$node->language][0]['average']))? $node->field_ae_stimclasswrk[$node->language][0]['average'] : NULL;

或者更容易阅读:

if (isset($node->field_ae_stimclasswrk[$node->language][0]['average'])){
  $test1 = $node->field_ae_stimclasswrk[$node->language][0]['average'];
} else {
  $test1 = NULL;
}

这样它就会绕过任何不使用该字段的节点。