字段集合输出:未定义的索引:template_field__custom_field drupal 7中的实体

时间:2013-03-05 10:34:16

标签: drupal drupal-7 undefined-index drupal-templates drupal-entities

也许您已经知道如何解决以下问题。我在template.php中重写了一个field-collection-field来改变输出。因此我只添加了一个包含特定值的新var($ 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;

我不是程序员,所以我希望你能帮助我!非常感谢!!!

以下是解决方案: 问题是,当您尝试更改字段集合的输出时,您还会更改字段集合中没有entity-id的继承字段。所以你只需要在$ classes上使用isset(感谢@Hans Nilson)并提取实体的id以在你的函数中使用它。这是代码中的解决方案:

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 个答案:

答案 0 :(得分:0)

这意味着在这一行:

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

此$ delta

中不存在键'实体'

您可以添加支票:

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

但如果你认为特定的delta没有实体密钥,那么尝试找出为什么特定的delta没有实体密钥可能更有意义。