如何在Drupal 7中隐藏preprocess_node中的字段

时间:2012-09-20 14:07:53

标签: drupal drupal-7

我有一个简单的问题。我的内容类型(标题图片)中的字段必须打印在page.tpl.php中(因为布局)。

它运行正常,我在theme_preprocess_page()函数中放了一些代码来显示page.tpl.php中的字段

function theme_preprocess_page( &$variables, $hook )
{
    $node = menu_get_object();

    if( $node && $node->type == 'page' )
    {
        $view = node_view($node);
        $variables['headerimage'] = render($view['field_headerimage']);
    }
}

现在我遇到了从节点视图隐藏field_headerimage的问题。它不能从管理ui(内容类型 - >管理显示)中隐藏,因为如果我从那里隐藏它​​,它也不会在theme_preprocess_page()中可用。

所以我试图隐藏preprocess_node

中的那个字段
function theme_preprocess_node( &$variables, $hook )
{
    if( $variables['page'] )
    {
        hide($variables['field_headerimage']);
        unset($variables['field_headerimage']);
        $variables['field_headerimage'] = NULL;
    }
}

我添加了我试图删除显示的每一行代码。我究竟做错了什么?或者:如何隐藏theme_preprocess_node()

中的字段

1 个答案:

答案 0 :(得分:22)

hook_preprocess_node()中,已经为节点对象构建了内容并将其转储到content数组中;这是将在模板文件中转换为$content的数组,以及从中删除字段显示所需的数组:

if( $variables['page'] )
{
    hide($variables['content']['field_headerimage']);
    // ...

那应该摆脱它没问题。

为了完整起见,您也可以在node.tpl.php文件中轻松完成此操作:

hide($content['field_headerimage']);

或在自定义模块的hook_node_view()中:

function MYMODULE_node_view($node, $view_mode, $langcode) {
  hide($node->content['field_headerimage']);
}