Cara mengubah filter yang terpapar secara terprogram dalam tampilan


10

Saya memiliki tampilan halaman dengan filter terbuka. Salah satu filternya adalah kosakata istilah, dan itu daftar dropdown, pengguna hanya dapat memilih satu kategori (istilah).

Saya ingin menetapkan secara terprogram satu istilah dari daftar dropdown ketika saya datang dari URL tertentu. Aku mencoba dengan views_query_altermana $categoryadalah tid.

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

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

Berikut ini juga tautan yang bermanfaat: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Jawaban:


14

Untuk drupal 7 bisa Anda gunakan

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

Ini adalah

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

Untuk contoh lengkap, Anda dapat mencoba ini:

$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);

Cara lain adalah menggunakan fungsi views 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
di mana Anda menempatkan ini, dalam tampilan pra eksekusi atau sesuatu seperti itu?
Mika A.

Dalam tpl dilihat! Dan contoh lengkapnya, di mana saja, ia memiliki fungsi tampilan beban
rafinskipg

1
Anda juga dapat menambahkannya ke hook_views_pre_view
Quentin Campbell

5
File tpl harus digunakan untuk menampilkan konten yang dirender, bukan untuk mengatur logika bisnis. Silakan coba salah satu dari banyak pandangan kait lainnya: api.drupal.org/api/views/views.api.php/7
aaronbauman

Bagaimana dengan filter yang tidak terbuka? Saya memiliki kasus penggunaan yang sangat jarang dan saya perlu menetapkan nilai filter dengan kode khusus.
Codium

1

Tetapkan nilai filter yang terbuka seperti ini:

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

1

dengan Drupal 7.54 saat Anda ingin memproses filter terbuka secara terprogram, ini adalah bagaimana Anda melakukannya ketika Anda memiliki beberapa bidang bernilai. Solusi untuk melihat cara melewatkan filter yang terbuka adalah dengan mengikuti bagaimana URL dibuat.

Di sini: 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();

Anda dapat menjalankan ini dari mana pun Anda inginkan. Lebih disukai dari file modul.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.