仅在Drupal 7 page.tpl.php中呈现单个页面字段一次

时间:2012-10-16 20:30:25

标签: drupal-7

所以我收集我可以像{...}那样呈现$page['content']数组的特定元素。

<?php print render(field_view_field('node', $node, 'field_image')); ?>

如果开箱即用,这将使标准默认值按预期呈现元素。好的,那么我怎样才能确保手拔的元素不再在<?php print render($page['content']) ?>之后的电话中呈现?

为什么我想要这样的哑巴?因为每个页面都会有一个标题图像,其中包含一些用于叠加,设计等的CSS技巧。但并非每个页面都有附件,链接等等......你知道,这些是页面中的其他字段。所以我不能手动打印每个字段,因为我不知道有多少或其他什么。我所知道的就是我上面打印的field_image包含了大量的样式标记,必须以这种方式完成。其他一些领域也是如此。

基本上我正在寻找一种在使用后立即取消该字段的方法。

有谁知道如何实现这一目标?我宁愿不为特定页面制作视图或自定义块。我最终不得不把它交给一个客户,他们无法围绕在CMS中的许多地方管理的单个页面。

2 个答案:

答案 0 :(得分:3)

实际上,您可以控制Drupal中内容类型的各个字段的显示,而无需使用您使用过的函数。

由于您事先知道要抑制哪个字段,因此可以在内容类型设置中关闭其显示。

在Drupal 7中,请参阅:
管理员&gt;&gt;结构&gt;&gt;内容类型&gt;&gt; 您的内容类型&gt;&gt;管理显示
在“格式”下,选择&lt;隐藏&gt;对于要省略的字段。

这将阻止字段内容显示在通常的节点内容中,但field_view_field自然会仍然有效。

您还可以根据不同的视图模式微调您的字段格式,例如选择在预告片中显示该字段,但不是全部内容。

答案 1 :(得分:0)

看起来这样可行:

<?php
print render(field_view_field('node', $node, 'field_image'));
MYTHEME_remove_item($page['content'], 'field_image');
?>

并在template.php文件中我创建了这个函数:

function MYTHEME_remove_item(&$content, $field)
{
    foreach($content['system_main']['nodes'] AS $key => $val){
        unset($content['system_main']['nodes'][$key][$field]);
    }
}

在我看来,这很荒谬。我认为像drupal一样健壮的系统会有类似这样的解决方案。如果有人知道这样做的正确方法,我很乐意将它们标记为正确。与此同时,对于面临类似情况的其他人来说,这对我有用。