Вывод коллекции полей: неопределенный индекс: сущность в template_field__custom_field drupal 7
Возможно, у вас есть идея, как я могу решить следующую проблему. Я переписываю field-collection-field в моем template.php, чтобы изменить вывод. Поэтому я просто добавил новую переменную ($my_classes), которая содержит определенное значение. Это значение выходит из коллекции полей. Все работает отлично (мои классы добавлены - да), кроме проблемы, что я получил следующую ошибку:
Примечание: неопределенный индекс: сущность в template_field__field_fc_page_fields() (строка 333 из..
Эта ошибка появляется четыре раза, поэтому каждое следующее поле (-collection) выдает эту ошибку. Вот мой код:
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 в классах $ (спасибо @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;
}
1 ответ
Это означает, что в этой строке:
$my_classes = $variables['items'][$delta]['entity']['field_collection_item'][$delta+1]['field_layout']['#items'][0]['value'];
ключ 'entity' не существует в этой $delta
Вы можете добавить чек:
if (isset($variables['items'][$delta]['entity'])) { }
но, возможно, имеет смысл попытаться выяснить, почему конкретная дельта не имеет ключа сущности, если вы считаете, что он должен быть там.