Nói chung điều này phụ thuộc vào trường hợp sử dụng của bạn.
Nếu bạn muốn có một trường / bộ lọc / đối số nên hoạt động theo một cách nhất định, bạn nên viết một trình xử lý cho nó. Xem trợ giúp nâng cao về quan điểm để biết thêm thông tin.
Nếu bạn muốn thay đổi một số phần của truy vấn, bạn cũng có thể sử dụng hook_view_query_alter () . Điều tệ hại hook_views_query_alter()
là bạn không thể thực sự sử dụng lại mã ở đó.
Đây là mã ví dụ được hiển thị từ tài liệu. Nó đưa ra một ví dụ về những gì hook có thể làm.
function mymodule_views_query_alter(&$view, &$query) {
// (Example assuming a view with an exposed filter on node title.)
// If the input for the title filter is a positive integer, filter against
// node ID instead of node title.
if ($view->name == 'my_view' && is_numeric($view->exposed_raw_input['title']) && $view->exposed_raw_input['title'] > 0) {
// Traverse through the 'where' part of the query.
foreach ($query->where as &$condition_group) {
foreach ($condition_group['conditions'] as &$condition) {
// If this is the part of the query filtering on title, chang the
// condition to filter on node ID.
if ($condition['field'] == 'node.title') {
$condition = array(
'field' => 'node.nid',
'value' => $view->exposed_raw_input['title'],
'operator' => '=',
);
}
}
}
}
}