我需要从字段集合中呈现单个字段,以允许我根据特定条件调整字段顺序,字段内容,删除包装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
输出此内容。
将<?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的字段收集位看起来像是一团糟。
非常感谢任何帮助。
答案 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