В целом это зависит от вашего варианта использования.
Если вы хотите иметь поле / фильтр / аргумент, который должен вести себя определенным образом, рекомендуется написать обработчик для него. См. Расширенную справку представлений для получения дополнительной информации.
Если вы хотите изменить некоторые части запроса, вы также можете использовать 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' => '=',
);
}
}
}
}
}