ビューでプログラム的に公開されたフィルターを変更する方法


10

公開されたフィルターのあるページビューがあります。フィルターの1つは用語ボキャブラリーです。これはドロップダウンリストであり、ユーザーは1つのカテゴリ(用語)しか選択できません。

特定のURLから来たときに、ドロップダウンリストからプログラムで1つの用語を設定したい。私は試したviews_query_alterところ$categoryですtid

 $set_exposed_input  = array();
 $set_exposed_input['field_category_tid'] = $category;

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }

こちらも便利
Andrey Rudenko

回答:


14

drupal 7の場合、使用できます

$view->exposed_input[$key] = $value;

これは

$view->exposed_input['title'] = 'My title is a cat';

完全な例として、これを試すことができます:

$name = 'name_of_view';
$display = 'page_1';
$alter = array('exposed' =>array('title' => 'title_value'));

$view = views_get_view($name);
$view->init_display($display);
$view->preview=TRUE;
$view->is_cacheable = FALSE;


if(isset($alter['exposed'])){
  foreach($alter['exposed'] as $key => $valor){

     $view->exposed_input[$key] = $valor;

  }
}

$view->pre_execute();
$output = $view->display_handler->preview();
$view->post_execute();

print_r($view->result);

他の方法は、ビューのset_option関数を使用することです

$filters = $view->display_handler->get_option('filters');

foreach($alter['exposed'] as $key => $valor){
   $filters[$key]['value'] = $valor;
   $view->display_handler->set_option('filters', $filters);
}

1
実行前などのビューのどこに配置しますか?
ミカA.

ビューでtpl!そして、完全な例には、どこにでもロードビュー機能があります
rafinskipg

1
また、hook_views_pre_viewに追加することもできます
Quentin Campbell

5
tplファイルは、ビジネスロジックを設定するためではなく、レンダリングされたコンテンツを表示するために使用する必要があります。他の無数のビューフックの1つを試してください:api.drupal.org/api/views/views.api.php/7
aaronbauman '22

非露出フィルターはどうですか?非常にまれなユースケースがあり、カスタムコードでフィルター値を設定する必要があります。
Codium

1

次のように公開されたフィルター値を設定します。

$view->exposed_input['field_category_tid'] = $category;

1

Drupal 7.54では、公開されたフィルターをプログラムで処理する場合、これは複数の値を持つフィールドがある場合に行う方法です。公開されたフィルターを渡す方法を確認するソリューションは、URLの作成方法に従うことです。

ここに:view_name?alias [1] = 1

$view = views_get_view('view_name');
$view->init_display('display_id');

$filters = array('alias' => array('1'));
$view->set_exposed_input($filters);

$view->execute();

これはどこからでも実行できます。できればモジュールファイルから。

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