/** * Alter the query before it is executed. * * @param \Drupal\views\ViewExecutable $view * The view object about to be processed. * @param QueryPluginBase $query * The query plugin object for the query. * * @see hook_views_query_substitutions() * @see \Drupal\views\Plugin\views\query\Sql */ function hook_views_query_alter(ViewExecutable $view, QueryPluginBase $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->id() == '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' => '='); } } } } }
/** * Gets all the views plugin definitions. * * @return array * An array of plugin definitions for all types. */ public static function getPluginDefinitions() { $plugins = array(); foreach (ViewExecutable::getPluginTypes() as $plugin_type) { $plugins[$plugin_type] = static::pluginManager($plugin_type)->getDefinitions(); } return $plugins; }