ビューを前処理するためのフックは何ですか?


7

結果をphpテンプレートにレンダリングする直前に利用できるフックは何ですか?

また、ビューの結果を変更するこの方法は悪い習慣ですか?ビューのphpフィールドを使用しないようにしています。

回答:


11

あなたはこれに沿って何かを使うことができます:

MYMODULE_views_pre_render(&$view) {

  if ($view->name=='NAMEOFTHEVIEW') {

    foreach($view->result as $r => $result) {
      // do whatever you want with each "row"
    }

  }

  // other views might go here

}

これは確かに悪い習慣ではなく、少なくとも私見では、ビュー自体のphpフィールドよりはるかに優れています。


このフックを実装すると、実行によりこの関数が呼び出され、関数宣言行に到達します。ただし、関数内には入りません。問題は何でしょうか?
cissharp 2016年

1
ではhook_views_pre_render()、行をレンダー配列として取得しないでください。これは、多くの場合、非常に役立ちます。
CamilB 2017年

8

したがって、設計上、によって定義されたすべてのテーマフックhook_themeには、呼び出される前処理関数があります。ビューの秘訣は、それらすべてが実際に何であるかを知ることです。

現在のサイトで利用可能なすべてのViewsテーマフックの定義を取得するには、Drushが必要ですが、次のことができます。

drush @alias php-eval "var_dump(array_keys(views_theme()));"

これにより、現在のサイトのビューに定義されているすべてのテーマフックが返されます。私にとって、それは以下を返しました:

array(35) {
  [0] =>
  string(16) "views_mini_pager"
  [1] =>
  string(16) "views_view_field"
  [2] =>
  string(19) "views_view_grouping"
  [3] =>
  string(10) "views_view"
  [4] =>
  string(22) "views_view_unformatted"
  [5] =>
  string(17) "views_data_export"
  [6] =>
  string(28) "views_data_export_csv_header"
  [7] =>
  string(26) "views_data_export_csv_body"
  [8] =>
  string(28) "views_data_export_csv_footer"
  [9] =>
  string(28) "views_data_export_doc_header"
  [10] =>
  string(26) "views_data_export_doc_body"
  [11] =>
  string(28) "views_data_export_doc_footer"
  [12] =>
  string(28) "views_data_export_txt_header"
  [13] =>
  string(26) "views_data_export_txt_body"
  [14] =>
  string(28) "views_data_export_txt_footer"
  [15] =>
  string(28) "views_data_export_xls_header"
  [16] =>
  string(26) "views_data_export_xls_body"
  [17] =>
  string(28) "views_data_export_xls_footer"
  [18] =>
  string(28) "views_data_export_xml_header"
  [19] =>
  string(26) "views_data_export_xml_body"
  [20] =>
  string(28) "views_data_export_xml_footer"
  [21] =>
  string(14) "views_view_raw"
  [22] =>
  string(15) "views_view_list"
  [23] =>
  string(15) "views_view_grid"
  [24] =>
  string(16) "views_view_table"
  [25] =>
  string(18) "views_view_summary"
  [26] =>
  string(30) "views_view_summary_unformatted"
  [27] =>
  string(14) "views_view_rss"
  [28] =>
  string(28) "views_view_summary_jump_menu"
  [29] =>
  string(20) "views_view_jump_menu"
  [30] =>
  string(17) "views_view_fields"
  [31] =>
  string(18) "views_view_row_rss"
  [32] =>
  string(21) "views_form_views_form"
  [33] =>
  string(18) "views_exposed_form"
  [34] =>
  string(10) "views_more"
}

したがって、私の場合、views_data_export_xml_bodyに行データを追加する必要がありました。だから私は私のモジュールで以下を定義しました:

function my_module_preprocess_views_data_export_xml_body(&$vars) {
  $vars['themed_rows'][0]['item_1'] = 'whatever';
}

これはあまり実用的な例ではありませんが、ビューのテーマフックの前処理関数を検出、識別、および実装する方法を示しています。お役に立てれば。


6

私はこのページが好き:ビューの人生

Viewsは、クエリを生成するためのUIがあるだけでなく、包括的なフックを提供するため、驚くべきモジュールです。

時々これらのフックは初心者とそのシーケンスを混同します。

以下は、これらのフックの処理シーケンスです。


4

何をしたいかによります。幸い、すべてのビュー関数がDrupal APIリファレンスに含まれています。

あなたが見たい2つのグループがあります。ビューフックがあります。これらは$view、ビュー構築プロセスのさまざまなポイントでオブジェクトをいじるために使用されます。ドキュメントはそれほど素晴らしいものではありません。名前から何ができるかを推測できることもありますが、通常は、dpm($view)何があるかを確認し、さまざまなフックで試してみる必要があります。ビューの動作を変更したい場合は、フックを使用してください。

次に、前処理処理機能があります。他のDrupalと同様に、これらはビューテンプレートファイルと1対1で対応します。ビューのレンダリング方法を変更する場合は、これらのいずれかを使用してください。

フックを使用してビューの動作を変更することはまったく悪い考えではないと思います。私は一般的に、UI構成でPHPコードをできるだけ避けようとしています。


1

あなたはhook_views_pre_render()を探しています。すべてのビューフックはviews.api.phpで定義されており、ビューのクエリの作成やレンダリングプロセスで何かを変更する場合は、一読の価値があります。

グレゴリーの答えには、フック呼び出しの順序を概説する良いリンクもあります。

ただし、本当に必要なことはすべてフックを介して処理する必要があることを確認してください。Views3.xを使用すると、これまでに必要なことのほとんどをマークアップのように、Views UIを介して簡単に実行できます。

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