En general, esto depende de su caso de uso.
Si desea tener un campo / filtro / argumento que debería comportarse de cierta manera, se recomienda escribir un controlador para él. Consulte la ayuda avanzada de vistas para obtener más información.
Si desea cambiar algunas partes de la consulta, también puede usar hook_views_query_alter () . Lo malo hook_views_query_alter()
es que realmente no se puede reutilizar el código allí.
Este es el código de ejemplo que se muestra en la documentación. Da un ejemplo de lo que puede hacer el gancho.
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' => '=',
);
}
}
}
}
}