โดยทั่วไปแล้วขึ้นอยู่กับกรณีการใช้งานของคุณ
หากคุณต้องการมีฟิลด์ / ตัวกรอง / อาร์กิวเมนต์ซึ่งควรทำงานในลักษณะใดวิธีหนึ่งขอแนะนำให้เขียนตัวจัดการ ดูความช่วยเหลือขั้นสูงสำหรับมุมมองสำหรับข้อมูลเพิ่มเติม
หากคุณต้องการที่จะเปลี่ยนบางส่วนของแบบสอบถามคุณยังสามารถใช้hook_views_query_alter () สิ่งที่ไม่ดีเกี่ยวกับhook_views_query_alter()
คือคุณไม่สามารถใช้รหัสซ้ำอีกครั้งได้
นี่คือตัวอย่างรหัสที่แสดงจากเอกสารประกอบ มันเป็นตัวอย่างของสิ่งที่ตะขอสามารถทำได้
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' => '=',
);
}
}
}
}
}