Saat menggunakan Drupal 7 dan Views 3, apa cara yang benar untuk mengubah nilai filter Views sehingga mempengaruhi konten yang baru saja akan dirender?
Saya mencoba semua yang disebutkan sini untuk D6.
Meskipun beberapa orang berhasil, Merlin menyatakan bahwa memodifikasi display_options adalah cara yang salah untuk mencapai ini, tetapi dia tidak jelas dalam tanggapannya mengenai apa yang harus dilakukan ( http://drupal.org/node/789710#comment- 2927556 ).
Saya telah mencoba:
function pages_views_pre_view($view){
$view = views_get_view('north_carolina');
$view->set_display('default');
$view->display_handler->options['filters']['province']['value'] = 'Georgia';
dsm($view->display_handler->options['filters']['province']);
}
Catatan:
1) Saya memiliki pandangan yang dibuat bernama north_carolina
yang memiliki dua jenis tampilan - halaman dan blok (halaman_1 dan blok_1).
2) filter saya sama di seluruh pajangan saya jadi saya mencoba mengubah tampilan 'default' sehingga memengaruhi semuanya.
3) Nilai default dari filter saya adalah 'North Carolina' (yang saya atur di UI Views) tetapi perhatikan saya mencoba mengubahnya menjadi 'Georgia'
4) Jika saya menjalankan DSM segera setelah itu, saya melihat bahwa filter telah diubah, namun, hasil saya masih menunjukkan hasil 'North Carolina'. Caching dimatikan, dan saya masih mendapatkan hal yang sama setelah menjalankan cc drush semua.
Saya juga mencoba menjalankan kode yang sama melalui hook_views_pre_build
dan hook_views_pre_execute
.
Ada saran?
EDIT:
Seperti yang disarankan itu mungkin membantu untuk memiliki informasi tambahan. Berikut ini adalah dump view:
$view = new view();
$view->name = 'north_carolina';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'North Carolina';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'test nc block';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Location: Province */
$handler->display->display_options['filters']['province']['id'] = 'province';
$handler->display->display_options['filters']['province']['table'] = 'location';
$handler->display->display_options['filters']['province']['field'] = 'province';
$handler->display->display_options['filters']['province']['value'] = 'North Carolina';
$handler->display->display_options['filters']['province']['exposed'] = TRUE;
$handler->display->display_options['filters']['province']['expose']['operator_id'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['label'] = 'State';
$handler->display->display_options['filters']['province']['expose']['operator'] = 'province_op';
$handler->display->display_options['filters']['province']['expose']['identifier'] = 'province';
$handler->display->display_options['filters']['province']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
4 => 0,
);
/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->display->display_options['block_description'] = 'test nc block';
Perhatikan bahwa penangan ini disediakan oleh modul lokasi. Khusus untuk filter "Lokasi: Provinsi" saya diberikan formulir lengkapi otomatis. Ketika saya mengetik di North Carolina, itu muncul, dan saya harus memilih itu. Namun, pemberitahuan dalam pernyataan SQL yang dilihatnya menghasilkan menggunakan singkatan dua karakter untuk status:
SELECT node.title AS node_title, node.nid AS nid, node.created AS node_created
FROM
{node} node
LEFT JOIN {location_instance} location_instance ON node.vid = location_instance.vid
LEFT JOIN {location} location ON location_instance.lid = location.lid
WHERE (( (node.status = '1') AND (location.province = 'NC') ))
ORDER BY node_created DESC
LIMIT 10 OFFSET 0