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);
 }
miske
sumber
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);
}
rafinskipg
sumber
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;
Junaid
sumber
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.

Denis Kolmerschlag
sumber