Расчетное поле drupal 7 возвращает неопределенный индекс - PullRequest
1 голос
/ 25 сентября 2011

Хорошо, я борюсь сейчас через два часа - и я до сих пор не могу его получить.

Я пытаюсь усреднить все пятизвездочные оценки, которые у меня есть для узла, используя вычисляемое поле. Но я изо всех сил пытаюсь просто получить доступ к другим полям, используя сущность!

В теле узла это работает нормально:

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

, но в области вычисляемых полей это не работает:

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

Вместо этого, когда я сохраняю узел, я получаю эту ошибку индекса:

Примечание: неопределенный индекс: und in eval () (строка 2 из ...

Это должен быть какой-то синтаксис, но у меня совершенно нет идей.

вот информация о поле:

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

                )

       )

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Просто небольшая ошибка в вашем коде:

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

Если вы посмотрите на это внимательно, вы фактически пытаетесь получить доступ к элементу языка поля дважды, один раз с $entity->language и один раз с und.

Вероятно, было бы лучше сохранить код контекстуальным, чтобы я удалил элемент [und] в коде:

$entity->field_ae_stimclasswrk[$entity->language][0]['average'];
1 голос
/ 27 октября 2011

У меня была такая же проблема.На самом деле это было вызвано несуществующим индексом внутри $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;
}

Таким образом, он будет обходить любые узлы, которые не используют поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...