Views (Drupal 7用)
Drupalデータベースからコンテンツのカスタマイズされたリストや表示を作成するための強力なクエリビルダーおよび表示システム。
views
概要
Viewsモジュールは、Drupalサイト上でコンテンツ、ユーザー、タクソノミー用語、その他のデータのリストやテーブルの表示方法を柔軟に制御する方法を提供します。各「ビュー」は、データベースからコンテンツを取得し、任意の形式で表示するためにカスタム設計されたクエリです。
Viewsは、コードを書かずにSQLクエリを構築するためのグラフィカルインターフェースを提供します。URLを持つページ表示、リージョンに配置するブロック、RSS出力用のフィード、その他多くを作成できます。このモジュールは、データタイプ間のリレーションシップ、ユーザーインタラクション用の公開フィルター、コンテキストフィルター(引数)、および広範なテーマ機能をサポートしています。
Viewsシステムは、ハンドラー(フィールド、フィルター、ソート、引数、リレーションシップ用)とプラグイン(表示、スタイル、行、アクセス制御、キャッシュ、ページャー、クエリ用)を通じて高度に拡張可能です。これにより、多くのDrupal 7モジュールとサイト構築パターンの基盤となっています。
Features
- SQLの知識なしでデータベースクエリを作成するためのグラフィカルクエリビルダーインターフェース
- 複数の表示タイプ:Page(URLとメニューリンク付き)、Block、Feed(RSS/Atom)、Attachment、Embed
- フォーマットオプション付きでノード、ユーザー、タクソノミー、コメント、カスタムデータを表示するための柔軟なフィールドハンドラー
- サイト訪問者が結果を動的にフィルタリングできる公開フィルター付きフィルターハンドラー
- ユーザーが結果の順序を制御できる公開ソート付きソートハンドラー
- URLパラメータまたは他のコンテキストに基づく動的コンテンツのためのコンテキストフィルター(引数)
- 関連データを結合するためのリレーションシップハンドラー(例:ノード作成者、タクソノミー用語)
- トークンとカスタムテキストを含むヘッダー、フッター、空テキストコンテンツ用のエリアハンドラー
- 複数のスタイルプラグイン:フォーマットなしリスト、HTMLリスト、グリッド、テーブル(ソート可能なカラム付き)、RSS
- 個々のアイテムをフィールド、フルノード、ティーザー、またはカスタム形式でレンダリングするための行プラグイン
- ページリロードなしでページングと公開フィルターを更新するAJAXサポート
- クエリ結果とレンダリング出力の両方に対する時間ベースのキャッシュ
- ビュー/表示レベルでのパーミッションまたはロールによるアクセス制御
- SQLクエリ表示とパフォーマンス統計を備えた管理インターフェースでのライブプレビュー
- デプロイと共有のためのビュー設定のエクスポート/インポート
- ビュー固有および表示固有の候補を持つ広範なテンプレートオーバーライドシステム
- 18のDrupalコアモジュールとの統合(node、user、taxonomy、comment、fieldなど)
- ページャープラグイン:フルページャー、ミニページャー、固定アイテム数、またはページャーなし
- フィールド値で結果を整理するためのグループ化サポート
- ビュー編集への素早いアクセスのためのコンテキストリンク統合
Use Cases
コンテンツリスティングページ
タイプ、タクソノミー用語、作成者、または日付でフィルタリングされたコンテンツのリストを表示するページを作成。例:ブログリスト、ニュースアーカイブ、記事インデックス、製品カタログ。ページ表示、ユーザーによる絞り込み用の公開フィルター、大量の結果セット用のページングで設定。
最新/人気コンテンツのサイドバーブロック
最新の投稿、人気記事、今後のイベント、または注目コンテンツを表示するブロックを構築。制限されたアイテム数とページャーなしのブロック表示を使用。日付、閲覧数、または固定フラグでソート。補助ナビゲーションとしてサイドバーリージョンに配置。
管理用コンテンツ管理
一括操作でコンテンツを管理するための管理インターフェースを作成。ソート可能なカラム、コンテンツタイプとステータスの公開フィルター、編集/削除リンクを持つテーブル形式。一括アクション用にViews Bulk Operations(VBO)モジュールと統合。
ユーザーディレクトリとメンバーリスト
コミュニティサイト用にユーザー画像、経歴、プロフィール情報を含むユーザーリストを表示。ロール、登録日、またはカスタムプロフィールフィールドでフィルタリング。公開メンバーディレクトリと管理用ユーザー管理ビューの両方を作成。
タクソノミー用語ページ
デフォルトのタクソノミー用語ページを、特定の用語でタグ付けされたコンテンツを表示するカスタムビューで置き換え。コンテンツタイプ、日付範囲、または作成者の公開フィルターを追加。関連する用語または用語階層を表示。
関連コンテンツブロック
コンテキストフィルターを使用して、現在表示中のノードに関連するコンテンツを表示するブロックを作成。タクソノミー用語、作成者、またはカスタムリレーションシップで関連付け。さらなるエンゲージメントを促すためにノードページに配置。
RSSフィードとコンテンツシ���ジケーション
コンテンツカテゴリ、ユーザーアクティビティ、またはサイト全体の更新用のRSS/Atomフィードを生成。RSSスタイルでフィード表示を使用。アイテムタイトル、リンク、説明などのフィード固有のフィールドを設定。
画像ギャラリーとポートフォリオ
画像フィールドでグリッドスタイルを使用して画像ギャラリーを作成。コンパニオンモジュールを通じてライトボックス統合を追加。複数のギャラリー、カテゴリ分け、スライドショービューをサポート。
イベントカレンダーとスケジュール
今後のイベントをリスト、テーブル、またはカレンダー形式で表示。日付範囲、イベントカテゴリ、または場所でフィルタリング。日付フィールド処理とカレンダー表示のためにDateモジュールと統合。
検索結果ページ
デフォルトのDrupal検索より多くの制御を持つカスタム検索結果表示を作成。検索語をハイライト、関連メタデータを表示、公開フィルターによる絞り込みを許可。
Eコマース製品リスト
カテゴリ、価格帯、または属性でのフィルタリングを持つ製品カタログページを構築。製品画像、価格、カートに追加リンクを含むテーブルまたはグリッド表示。CommerceおよびUbercartモジュールと統合。
レポートとデータダッシュボード
コンテンツ統計、ユーザーアクティビティ、またはカスタムデータを表示する管理レポートを作成。カウントと合計に集計を使用。ソートとコンパニオンモジュールによるCSVエクスポートを持つテーブル形式。
Tips
- すべての表示で共有する設定にはMaster表示を使用し、表示ごとに特定の設定をオーバーライドして繰り返しを避けてください。
- リレーションシップとコンテキストフィルターへのアクセスを容易にするために、Views設定で「常に詳細表示設定を表示」を有効化してください。
- 異なる引数値でビューをテストするには「コンテキストフィルターでプレビュー」オプションを使用してください。
- 類似のユースケースでは、最初から作成するよりも既存のビューを複製して開始点にしてください。
- フィールドの書き換えを使用して、カスタムリンクを作成したり、フィールドを組み合わせたり、フィールド出力にトークンを適用したりしてください。
- 開発中は生成されたクエリを理解しデバッグするためにSQLクエリ表示を有効化してください。
- 複雑なフィルタリングロジック用のAND/ORフィルター組み合わせを作成するにはグループ化されたフィルターを使用してください。
- チームドキュメント用にビューと表示に意味のある管理コメントを設定してください。
- 書き換えやソートのためのデータを提供するが表示すべきでないフィールドには「表示から除外」オプションを使用してください。
- アクセス設定が権限レベル間で正しく機能することを確認するために、異なるユーザーロールでビューをテストしてください。
- Views UIのキーボードショートカットを使用:Ctrl+Enterでフォームを保存、Escapeでモーダルダイアログを閉じる。
- バックアップと環境間のデプロイメントのためにビューを定期的にエクスポートしてください。
- テーマとJavaScriptターゲティングを容易にするためにCSS設定でセマンティックなクラス名を使用してください。
- 共有の公開フィルターで複数のビューを組み合わせるにはAttachment表示の使用を検討してください。
Technical Details
Admin Pages 8
/admin/structure/views
利用可能なすべてのビューを有効と無効のグループに分けて表示するメインViews管理ページ。このページから新しいビューの追加、既存ビューの有効化/無効化、ビュー設定の編集、ビューの複製、ビューのエクスポート、ビューの削除ができます。リストフィルターオプションが有効な場合、ビューをフィルタリングおよびソートできます。
/admin/structure/views/add
新しいビューを素早く作成するためのウィザード形式のインターフェース。基本設定を指定すると、ウィザードが開始設定を生成し、その後フルエディターでカスタマイズできます。
/admin/structure/views/view/%view_name/edit
すべての設定オプションを備えたフルビュー編集インターフェース。インターフェースは表示設定、フォーマット/フィールド、フィルター条件、ソート条件、コンテキストフィルター、リレーションシップ、詳細オプションのセクションに分かれています。各表示(Master、Page、Blockなど)は独立して設定するか、Master表示から継承できます。
/admin/structure/views/settings
すべてのビューとViews UIの動作に影響するグローバル設定。
/admin/structure/views/settings/advanced
デバッグ、キャッシュ、およびローカライゼーションの詳細設定。
/admin/structure/views/import
エクスポートされたPHPコードからビューをインポート。エクスポートされたビューコードを貼り付け、名前を指定してビュー設定をインポートします。
/admin/reports/fields/views-fields
システム内のすべてのビューでのフィールドとその使用状況のレポートを表示します。フィールドを削除する前の使用状況の監査に便利です。
/admin/reports/views-plugins
すべてのViewsプラグイン(表示、スタイル、行など)とそれらを使用しているビューのレポートを表示します。サイト全体でのプラグイン使用状況を理解するのに便利です。
権限 2
Hooks 23
hook_views_api
モジュールをViews APIの実装として登録します。Viewsがモジュールの.views.incファイルを読み込み、ハンドラー/プラグインを認識するために必要です。
hook_views_data
データベーステーブルとフィールドをViewsに説明し、ビューで使用できるようにします。フィールド、フィルター、ソート、引数、リレーションシップのハンドラーを定義します。
hook_views_data_alter
他のモジュールで定義されたViewsデータを変更します。既存のテーブルにフィールドを追加、ハンドラーを変更、またはリレーションシップを変更します。
hook_views_plugins
カスタムプラグイン(表示、スタイル、行、引数デフォルト、引数バリデーター、アクセス、キャッシュ、ページャー、公開フォーム、ローカライゼーション、クエリ、表示エクステンダー)を登録します。
hook_views_plugins_alter
他のモジュールのプラグイン定義を変更します。
hook_views_default_views
モジュールに同梱されるデフォルトビューを提供します。ビューはサイト管理者が有効化/無効化できます。
hook_views_default_views_alter
キャッシュされる前に他のモジュールで定義されたデフォルトビューを変更します。
hook_views_pre_view
ビュー処理の最初(execute_displayまたはpreview)に呼び出されます。何も行われる前にビューを変更できます。
hook_views_pre_build
表示のpre_execute後、クエリビルドプロセス前に呼び出されます。クエリ構築前にビューを変更するのに便利です。
hook_views_post_build
ビルドプロセスの直後に呼び出されます。クエリは完全に構築されていますが、まだ実行されていません。
hook_views_pre_execute
クエリ実行の直前に呼び出されます。クエリを変更する最後のチャンスです。
hook_views_post_execute
クエリ実行の直後に呼び出されます。結果は利用可能ですが、pre_renderはまだ実行されていません。
hook_views_pre_render
レンダリングの直前に呼び出されます。ハンドラーのpre_renderが完了し、すべてのデータが利用可能です。
hook_views_post_render
レンダリング完了後に呼び出されます。レンダリングされた出力の後処理を行えます。
hook_views_query_alter
実行前にクエリを変更します。クエリの条件、結合、その他の要素を直接操作できます。
hook_views_query_substitutions
ビュークエリで使用するプレースホルダー置換を提供します。***CURRENT_USER***のようなプレースホルダーはクエリ時に置換されます。
hook_views_invalidate_cache
Viewsキャッシュがクリアされた時に応答します。ビューが作成、更新、削除、有効化、または無効化された時に発火します。
hook_views_view_presave
ビューがデータベースに保存される直前に変更します。
hook_views_view_save
ビューが保存された時に応答します。
hook_views_view_delete
ビューが削除またはリバートされた時に応答します。
hook_views_ajax_data_alter
Views AJAXリクエストによって返されるAJAXコマンドを変更します。
hook_field_views_data
Field APIフィールドタイプのデフォルトViewsデータをオーバーライドします。フィールドタイプを定義するモジュールに対して呼び出されます。
hook_field_views_data_alter
デフォルトデータが生成された後、単一のField APIフィールドのViewsデータを変更します。
Drush Commands 7
drush views-revert
オーバーライドされたビューをデフォルト(コード定義)の状態に戻します。ビュー名を指定しない場合、オーバーライドされたビューのリストから選択できます。
drush views-list
システム内のすべてのビューをステータス、タイプ、タグと共にリスト表示します。様々な条件でフィルタリングできます。
drush views-enable
指定されたビューを有効化します
drush views-disable
指定されたビューを無効化します
drush views-dev
開発用にViews設定を構成します。SQLクエリ表示、パフォーマンス統計を有効化し、ライブプレビュー自動更新を無効化し、デバッグ出力を有効化します。
drush views-analyze
すべてのビューを分析し、潜在的な問題を報告します。一般的な設定の問題をチェックし、警告を表示します。
drush cache-clear views
Viewsデータキャッシュとブロックキャッシュを含むViews固有のキャッシュをクリアします。
Troubleshooting 10
フィルター条件、特に公開ステータスとアクセス権限を確認してください。生成されたSQLを確認するためにクエリプレビューを有効化してください。ベーステーブルにデータがあることを確認してください。公開フィルターの値がすべての結果を除外していないか確認してください。
表示設定で「AJAXを使用」が有効になっていることを確認してください。ブラウザコンソールでJavaScriptエラーがないか確認してください。ビューに一意のDOM IDがあることを確認してください。Viewsとページキャッシュをクリアしてください。
クエリ設定で「Distinct」を有効化してください(詳細 > クエリ設定)。複数の行を作成する可能性のあるリレーションシップを確認してください。グループ化が必要な場合は集計を使用してください。
Views設定(/admin/structure/views/settings)で「Any値のラベル」を設定してください。各公開フィルターでもこれを設定でオーバーライドできます。
詳細設定でキャッシュ(時間ベース)を有効化してください。フィルタリング/ソートされるフィールドにデータベースインデックスを追加してください。取得するフィールドを制限してください。必要な場合のみ「ページャーをレンダー」を使用してください。コストの高いリレーションシップを確認してください。
テーマレジストリキャッシュをクリアしてください(drush cc theme-registry)。テンプレート名がパターンに従っていることを確認してください:views-view--[view-name]--[display-id].tpl.php。テンプレートがアクティブなテーマディレクトリにあることを確認してください。
表示のアクセス設定(なし/ロール/パーミッション)を確認してください。ユーザーに必要な権限またはロールがあることを確認してください。ノードを表示する場合、「コンテンツにアクセス」権限が付与されていることを確認してください。
/admin/structure/blockでブロックがリージョンに配置されていることを確認してください。ブロックの表示設定(ページ、ロール、コンテンツタイプ)を確認してください。ビューが有効でブロック表示が存在することを確認してください。
URL構造が引数の位置と一致していることを確認してください。引数がない場合の「デフォルト値」を設定してください。ノードページには「デフォルト値を提供 > URLからのコンテンツID」を使用してください。
ビュー編集ページで「保存」をクリックしてください(変更は自動保存されません)。「drush cc views」でViewsキャッシュをクリアしてください。複数のユーザーが同時に編集している場合、ロックされたビューを確認してください。
Security Notes 9
- PHPベースの引数やフィルターを作成できるため、「Administer views」権限は高度に信頼されたロールにのみ付与してください。
- 「Bypass views access control」権限は危険であり、開発以外ではめったに割り当てるべきではありません。
- 本番環境ではPHPコードプラグイン(引数デフォルト、引数バリデーター)の使用を避け、代わりにカスタムハンドラーを使用してください。
- Viewsはコンテンツを表示する際にノードアクセス権限を尊重しますが、異なるユーザーロールで確認してください。
- 公開フィルターはドロップダウンで機密性のあるフィールド値を明らかにする可能性があります - アクセスへの影響を考慮してください。
- SQLインジェクションはクエリビルダーによって防止されますが、カスタムクエリ変更では適切なプレースホルダーを使用する必要があります。
- ブロックビューは正しく設定されていない場合、ノードアクセスをバイパスする可能性があります - ブロック表示のアクセス設定を確認してください。
- フィード表示はノードアクセス設定に関係なく匿名ユーザーにコンテンツを公開する可能性があります。
- ビューエクスポートには設定のみが含まれますが、信頼できないソースからビューをインポートする前にレビューしてください。