web-dev-qa-db-ja.com

(結果を操作するために)どのフックまたはtplファイルがビューの出力を制御しますか?

定期的なイベントビューページを作成していますが、現在、ビューの出力には同じ日付イベントの複数の参照が表示されています。 Fieldsも出力として使用しておらず、ティーザーを使用しています。

私はこの問題を解決する2つの方法を考え出しましたが、どちらが最善でどのように対処するかを明確にしたいと思いました。

  1. ビューの行を出力するフックを見つけ、各行を比較して重複を削除する条件を記述します。

  2. Tplファイルを作成し、ビューの出力でpreg_replace()を実行して、同じデータの重複する行を削除します。

ここで問題は、このフックを見つける方法、またはViews tplファイルの名前をどうするかです。このイベントページのみに限定します。

enter image description here

3

ビューテンプレートの提案

すべてのビューテンプレートは、ビュー、ビューの表示ID、ビューの表示タイプ、またはそれらの組み合わせを使用して、さまざまな名前でオーバーライドできます。

以下は、デフォルトを上書きするために使用できるさまざまなテンプレートの提案です。

Foob​​arという名前のサンプルビューを考えてみましょう。スタイル:未フォーマット。行スタイル:フィールド。表示:ページ。

Display output:これは、ビューの管理リンク、ヘッダー、公開されたフィルター、ページャーの位置とその周りのコードを含む、ビュー全体の構造を制御します。詳細」リンク、フッター、フィードアイコン。このテンプレートは、プライマリビューコンテンツ、空のコンテンツ、およびアタッチされたビューの位置と周囲のコードも制御します。

views-view--foobar--page.tpl.php
views-view--page.tpl.php
views-view--foobar.tpl.php
views-view.tpl.php

スタイル出力:これは、この特定のビュー表示のスタイルの構造を制御します。 HTMLリスト、テーブル、未フォーマットなど。これには、ビュータイトルと、指定されたスタイルの各行(ビューのアイテム)を囲むコードが含まれます。

views-view-unformatted--foobar--page.tpl.php
views-view-unformatted--page.tpl.php
views-view-unformatted--foobar.tpl.php
views-view-unformatted.tpl.php

行スタイルの出力:これは、各フィールドのラベルと内容を含む、各行(ビュー内のアイテム)の内部構造を制御します。

views-view-fields--foobar--page.tpl.php
views-view-fields--page.tpl.php
views-view-fields--foobar.tpl.php
views-view-fields.tpl.php

Fields:ディスプレイの各フィールドに1つのエントリがあり、それぞれの構造とコードを制御できます。行スタイルが「ノード」に設定されている場合、フィールドエントリはなく、ビューは代わりにノードのテンプレートファイルを使用します。

あなたがフィールドリストにタイトルフィールドを追加したとしましょう、そして以下はテーマタイトルフィールドへの提案です

views-view-field.tpl.php
views-view-field--title.tpl.php
views-view-field--foobar.tpl.php
views-view-field--foobar--title.tpl.php
views-view-field--page.tpl.php
views-view-field--page--title.tpl.phpfoobar
views-view-field--foobar--page.tpl.php
views-view-field--foobar--page--title.tpl.php
views-view-field--page-1.tpl.php
views-view-field--page-1--title.tpl.php
views-view-field--foobar--page-1.tpl.php
views-view-field--foobar--page-1--title.tpl.php

Views Preprocessorsの提案前処理関数を使用してビューの表示を変更する場合は、以下の提案を使用してビューの表示を変更できます。

Views Preprocess suggestions

ビューの結果の変更ビュー自体の結果を変更する(つまり、レンダリングされる前に結果を変更する)には、次のフックのいずれかを使用できます。

これらのフックを使用する場合は、 jimajamma で回答を参照できます。

参照

7
Mathankumar

あなたが探していると思われるフックは views_pre_render() です。たとえば、...

function YOURMODULE_views_pre_render(&$view) {

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

    // modify $view->result per whatever logic you require

  }

}

...どこ $view->resultは、ビュー内のすべての行の配列です。ビューにフィールドではなくノードを表示しているとすると、これは、たとえば次のようなnidを指すオブジェクトの配列になります。

Array
(
  [0] => stdClass Object
    (
        [nid] => 1
    )

  [1] => stdClass Object
    (
        [nid] => 2
    )

  [2] => stdClass Object
    (
        [nid] => 3
    )

  [3] => stdClass Object
    (
        [nid] => 18
    )
)
2
Jimajamma

専用のテンプレートを使用するには、テンプレートファイルに「views-view -youreventsview。tpl.php」という名前を付けますyoureventsviewはビューの名前です。

2
adam_bear

私はこれが古いスレッドであることを知っています。しかし、誰かが管理者ビューのテーマ設定に苦労している場合、それは役に立ちます。

テーマ管理ビューに、単にTheme: Informationと提案されたテンプレートファイルをテーマのテンプレートフォルダに作成すると、ビューはsevenAdminimal Theme。また、提供されたテーマを変更することもお勧めできません。

では、解決策は何でしょうか?

とても簡単です...!

hook_views_apicustom module

/**
 * Implements hook_views_api().
 */
function mymodule_views_api() {
  $path = drupal_get_path('module', 'mymodule');
  return array(
    'api' => 3,
    'template path' => $path . '/templates',
  );
}

drupalキャッシュをクリアすると、ビューはモジュールのテンプレートフォルダーを探し始め、定義されたテンプレートを適用します。

私は詳細な ここでの説明 を書きました。

すべて完了。

テーマをお楽しみください!.

2
James