Khi sử dụng Drupal 7 và Chế độ xem 3, cách chính xác để thay đổi giá trị bộ lọc Chế độ xem để nó ảnh hưởng đến nội dung sắp được hiển thị là gì?
Tôi đã thử mọi thứ được đề cập ở đây cho D6.
Mặc dù một vài người đã làm cho nó hoạt động, Merlin nói rằng sửa đổi display_options là cách không chính xác để đạt được điều này, nhưng anh ta mơ hồ trong phản ứng của mình về việc phải làm ( http://drupal.org/node/789710#comment- 2927556 ).
Tôi đã thử:
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']);
}
Ghi chú:
1) Tôi có một chế độ xem được gọi là north_carolina
có hai loại màn hình - một trang và một khối (trang_1 và block_1).
2) các bộ lọc của tôi giống nhau trên các màn hình của tôi, vì vậy tôi đang cố gắng thay đổi màn hình 'mặc định' để nó ảnh hưởng đến tất cả chúng.
3) Giá trị mặc định của bộ lọc của tôi là 'Bắc Carolina' (mà tôi đã đặt trong Giao diện người dùng) nhưng lưu ý rằng tôi đang cố gắng thay đổi nó thành 'Georgia'
4) Nếu tôi chạy DSM ngay sau đó, tôi thấy rằng bộ lọc đã bị thay đổi, tuy nhiên, kết quả của tôi vẫn hiển thị kết quả 'Bắc Carolina'. Bộ nhớ đệm bị tắt, và tôi vẫn nhận được điều tương tự sau khi chạy tất cả cc.
Tôi cũng đã thử chạy mã tương tự thông qua hook_views_pre_build
và hook_views_pre_execute
.
Bất kỳ đề xuất?
BIÊN TẬP:
Theo đề xuất, nó có thể giúp có thêm thông tin. Đây là một bãi chứa của chế độ xem:
$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';
Lưu ý rằng các trình xử lý này được cung cấp bởi mô-đun vị trí. Cụ thể cho bộ lọc "Vị trí: Tỉnh" Tôi được cung cấp một biểu mẫu hoàn thành tự động. Khi tôi gõ ở Bắc Carolina, nó bật lên và tôi phải chọn nó. Tuy nhiên, lưu ý trong câu lệnh SQL rằng các khung nhìn tạo ra nó sử dụng chữ viết tắt hai ký tự cho trạng thái:
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