template_preprocess_views_viewを使用して変数をビューのtplファイルに渡す方法


8

最近2回目の事件が再発したので、何かを学ぶために質問することにしました。

ビューでは、メインディスプレイのタイトル(通常はビューの一番上にレンダリングされることを一つ)で提供され、ディスプレイ出力として、$titleしかしで利用できるようには見えないスタイルの出力すべてに。代わりに、スタイル出力$title変数は、グループ化が使用されている場合、グループの名前を意味します。

私が欲しいのは、その表示タイトル(「人間の名前」)を任意のテンプレートでとして使用できるようにすること$display_titleです。だから私がやったことはこのコードを私のtemplate.phpに入れていました:

function MYTHEME_preprocess_views_view(&$variables){
  if($variables['name'] == 'studios' && $variables['display_id'] == 'block'){
    $view = $variables['view'];
    $variables['display_title'] = $view->human_name;
  }
  dpm($variables);
}

...人間の肩書きが手元にあることを願っています: <?php print $display_title; ?>

...しかし喜びはない。何が悪いのですか?

回答:


10

ご存知のように、ビューにはいくつかのテンプレートがあり、スタイルによって異なる場合があります。次に例を示します。

  • ディスプレイ出力: views-view.tpl.php
  • スタイル出力: views-view-STYLE.tpl.php
  • 行スタイルの出力: views-view-fields.tpl.php
  • フィールドの内容: views-view-field.tpl.php

これらのテンプレートにはそれぞれ独自の前処理機能があります。コードで行うことは、views-view.tpl.php(template_preprocess_views_view)のみを前処理しているため、表示出力にのみ影響します

特定のビューで使用できるテンプレートファイルを確認するには、ビューの編集ページに移動し、列の最後にある[詳細]セクションで[テーマ:情報]をクリックします。ビューが使用しているテンプレートファイル(太字)と、それらを上書きするために使用するテンプレートファイルが表示されます。

前処理関数には、ダッシュをアンダースコアに置き換えて、テンプレートファイルにちなんだ名前を付ける必要があります。たとえばのようにviews-view-STYLE.tpl.phpなりますtemplate_preprocess_views_view_STYLE()


0

次の関数を使用できます。

  1. drupal_set_title()

    現在のページのタイトルを設定します。

  2. drupal_get_title()

    現在のページのタイトルを取得します。


ありがとう、しかし私の見解はページではなくブロックを生成するので、これは解決策ではありません。さらに、それは文字列引数を渡すことを必要とt('My Views Title')し、管理側で再度変換します。これは私が避けたいことです(まだそのビューを既に翻訳しています...)。
Artur

0

覚えているなら、ビューオブジェクトと共にタイトルを渡し、ビューオブジェクト内に新しい変数を追加して、テンプレートファイルに入れることができます。


0

「変数をテンプレートファイルに渡す」という特定の質問に対処するには...別のフックを使用する必要があると思います。次の$viewように、変数をオブジェクトにアタッチします。

function NAME_OF_MODULE_views_pre_render(&$view) {
  $view->display_title = "What have you";
}

次に、次のようなテンプレートファイルでviews-view--NAME_OF_VIEW--page.tpl.php

print $view->display_title;

自分でこれをしなければならず、それはうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.