呈现单个 FieldCollectionItemEntity 字段

Rendering individual FieldCollectionItemEntity fields

我需要呈现字段集合中的各个字段,以允许我根据特定条件调整字段顺序、字段内容、删除包装 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; ?>

print render 输出之前添加一个 dpm($item_object);

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

Recoverable fatal error: Object of class FieldCollectionItemEntity could not be converted to string in include() (line 99 of /var/www/html/sites/all/themes/xerox/templates/node--component-icon-promo.tpl.php).

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

如有任何帮助,我们将不胜感激。

建议这样使用,使用 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