[Drupal] バックエンドでViewsの結果を取得する


Viewsは通常ディスプレイ(ページ、ブロック、JSON、CSVなど)を通して結果を取得しますが、プログラムで取得することも可能です。

サンプルコード


use Drupal\views\Views;

// コンテンツ一覧のビューを取得.
$view = Views::getView('MY_VIEW_ID');

// ページディスプレイをセット.
$view->setDisplay('MY_DISPLAY_ID');

// 外部設置フィルターの値をセット.
$view->setExposedInput([
  'MY_KEY' => 'test',
]);

// ビューを実行.
$view->execute();

// 結果を取得.
$results = $view->result;

MY_VIEW_IDなどの引数は対象のビューのものを使用する必要があります。ちょっとわかりづらいかもしれませんが、それぞれ以下の方法で確認できます。

  • MY_VIEW_ID: ビューのシステム内部名称/admin/structure/viewsで確認できる
  • MY_DISPLAY_ID: ディスプレイの内部名称。ビューの編集画面で該当のディスプレイを表示するとURLの最後に表示される。コンテンツ一覧の場合、編集画面のURLは/admin/structure/views/view/content/edit/page_1なのでディスプレイの内部名称はpage_1
  • MY_KEY: 該当のフィルターの設定画面のフィルターの識別子

参考