Вывод коллекции полей: неопределенный индекс: объект в template_field__custom_field drupal 7

возможно, у вас есть идея, как я могу решить следующую проблему. Я переписываю поле коллекции полей в моем template.php, чтобы изменить вывод. Поэтому я просто добавил новую переменную ($my_classes), которая содержит определенное значение. Это значение выходит из коллекции полей. Все отлично работает (добавляются мои классы - ага), кроме проблемы в том, что я получил следующую ошибку:

Примечание: Неопределенный индекс: объект в template_field__field_fc_page_fields() (строка 333 из ..

Эта ошибка появляется четыре раза, поэтому каждое следующее поле (коллекция) выдает эту ошибку. Вот мой код:

function template_field__field_fc_page_fields($variables) {
kpr($variables);
$output = '';

// Render the label, if it's not hidden.
if (!$variables['label_hidden']) {
    $output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ': </div>';
}

// Render the items.
foreach ($variables['items'] as $delta => $item) {
// Custom class 
    $my_classes = $variables['items'][$delta]['entity']['field_collection_item'][$delta+1]['field_layout']['#items'][0]['value'];

    $classes = 'field-item ' . ($delta % 2 ? 'odd' : 'even');
    $output .= '<div class="' . $classes . ' ' . $my_classes .'"' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
}
// Render the top-level DIV.
$output = '<div class="' . $variables['classes'] . '"' . $variables['attributes'] . '>' . $output . '</div>';

return $output;

Я не программист, поэтому я надеюсь, что вы можете мне помочь! Большое спасибо!!!

Вот решение: Проблема в том, что когда вы пытаетесь изменить вывод коллекции полей, вы также изменяете унаследованные поля в своей коллекции полей, которые не имеют идентификатора сущности. поэтому вам просто нужно использовать isset для $classes (спасибо @Hans Nilson) И извлечь идентификатор объекта, чтобы использовать его в своей функции. вот решение в коде:

function template_field__field_fc_page_fields($variables) {
        // kpr($variables);
        $output = '';

        // Render the label, if it's not hidden.
        if (!$variables['label_hidden']) {
            $output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ': </div>';
        }
        // Render the items.
        foreach ($variables['items'] as $delta => $item) {
            if (isset($variables['items'][$delta]['entity']) && (isset($variables['element']['#items'][$delta]['value']))) {
                $fc_id = ($variables['element']['#items'][$delta]['value']);
            $my_classes = $variables['items'][$delta]['entity']['field_collection_item'][$fc_id]['field_layout']['#items'][0]['value'];
            }
            if (isset($variables['items'][$delta]['entity'])) {
                $classes = 'field-item-custom ' . $my_classes . ' ' . ($delta % 2 ? 'odd' : 'even');
            }
            else {
                $classes = 'field-item ' . ($delta % 2 ? 'odd' : 'even');
            }
            $output .= '<div class="' . $classes . '"' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
        }
        // Render the top-level DIV.
        $output = '<div class="' . $variables['classes'] . '"' . $variables['attributes'] . '>' . $output . '</div>';

        return $output;
    }

person jci    schedule 05.03.2013    source источник


Ответы (1)


Это означает, что в этой строке:

$my_classes = $variables['items'][$delta]['entity']['field_collection_item'][$delta+1]['field_layout']['#items'][0]['value'];

key 'entity' не существует в этой $delta

Вы можете добавить проверку:

if (isset($variables['items'][$delta]['entity'])) { }

но может иметь смысл попытаться выяснить, почему конкретная дельта не имеет ключа объекта, если вы считаете, что он должен быть там.

person Hans N. Hjort    schedule 05.03.2013
comment
но он существует, я имею в виду, что все значения отображаются из этой переменной, если $ delta не существует, должен ли я получить свои значения? Мне кажется, я просто что-то упускаю... - person jci; 05.03.2013
comment
$delta может существовать, но у него нет ключа 'entity'. - person Hans N. Hjort; 05.03.2013
comment
Хорошо, $delta — это просто число, я могу заменить его пользовательской переменной, например $i=0, и считать по массиву элементов, но это тоже не работает. - person jci; 05.03.2013