渲染单个FieldCollectionItemEntity字段

时间:2017-05-24 22:21:42

标签: php drupal-7

我需要从字段集合中呈现单个字段,以允许我根据特定条件调整字段顺序,字段内容,删除包装DOM节点等。

我一直在阅读this thread,因为它似乎是关于此问题的最佳资源,但我无法弄清楚为什么这个字段集合渲染器没有表现。

它根本不输出任何东西。

node--component-icon-promo.tpl.php

<? if (!empty($content['field_icon_promo_items'])) : ?>

  <div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>

    <?php foreach ($content['field_icon_promo_items']['#items'] as $entity_uri): ?>
      <?php 
        $item = entity_load('field_collection_item', $entity_uri); 
      ?>

      <?php foreach ($item as $item_object ): ?>

        <?php print render($item_object->field_cta); ?>

      <?php endforeach; ?>
    <?php endforeach; ?>

  </div>

<? endif; ?>

dpm($item_object);之前添加print render输出此内容。

Field output

<?php print render($item_object->field_cta); ?>更改为<?php print render($item_object); ?>只会导致错误。

  

可恢复的致命错误:类FieldCollectionItemEntity的对象   无法转换为include()中的字符串(第99行)   /var/www/html/sites/all/themes/xerox/templates/node--component-icon-promo.tpl.php)。

我知道那是因为$ item_object就是那个render doesn't like的对象。 API的字段收集位看起来像是一团糟。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

建议像这样使用它,使用entity_metadata_wrapper:

<? if (!empty($content['field_icon_promo_items'])) : ?>

  <div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>

    <?php foreach ($content['field_icon_promo_items']['#items'] as $entity_uri): ?>
      <?php 
        $item = entity_load('field_collection_item', $entity_uri);
      ?>

      <?php foreach ($item as $item_object ): ?>

        <?php 
            $wrapper = entity_metadata_wrapper('field_collection_item', $item_object);
            $field_cta = $wrapper->field_cta->value(); 
            //render your values with your own html or using theme_link function
        ?>

      <?php endforeach; ?>
    <?php endforeach; ?>

  </div>

<? endif; ?>

有关元数据包装器的更多帮助,请访问this link