3

簡単な問題があります。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()

4

1 に答える 1

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']);
}
于 2012-09-20T16:57:17.100 に答える