【问题标题】:How to hide field from preprocess_node in Drupal 7如何在 Drupal 7 中隐藏 preprocess_node 的字段
【发布时间】:2012-09-12 22:12:50
【问题描述】:

我有一个简单的问题。我的内容类型(标题图像)中有一个字段,必须以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()的字段

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    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']);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多