V Drupale 7 je možné pridať nové custom filtre pre views, ktoré sa následne dajú použiť pre vybraný view na filtrovanie.
Dá sa to urobiť pomocou “hook_views_data_alter”. Tento hook vytvorí nový filter s novým formulárovým inputom a vlastnými pravidlami validácie. Na tomto mieste sa nenastavuje, kde to má byť použité. Samotné použitie je potrebné nastaviť v konkrétnom view.
Príklad je XXXXX_views_data_alter
Vo funkcií XXXXX_views_data_alter(&$data) {
sa nastavia pravidlá
$data['node']['filter_agentura']['title'] = t('Filter na agentúru');
$data['node']['filter_agentura']['help'] = 'Zobrazi obsah pre agentúru podla autora obsahu.';
$data['node']['filter_agentura']['filter']['handler'] = 'universal_poziadavky_handler_filter_agentury';
“XXXXX_handler_filter_agentury“ označuje triedu v ktorej budú zadafinované pravidlá pre filter.
Táto trieda je rizširením triedy “views_handler_filter_in_operator
“.
class XXXXX_handler_filter_agentury extends views_handler_filter_in_operator {
function get_value_options() {
$this->value_title = t(‚Agentúra‘);
$this->value_options = universal_common_get_struktura(‚RA‘);
return $this->value_options; }
function query() {
$this->ensure_my_table();
$placeholder = $this->placeholder();
$ludia = array_merge($this->value, get_all_podriadeni_from_cislo_pp($this->value));
$args = array_values(universal_common_get_drupal_user_uids_from_cpp($ludia));
if(count($args)) { $this->query->add_where_expression($this->options[‚group‘], „$this->table_alias.uid IN($placeholder) “ . „OR ((SELECT COUNT(*) FROM {node_revision} nr WHERE nr.uid IN($placeholder) AND nr.nid = $this->table_alias.nid) > 0)“, array($placeholder => $args), $args);
}
}
}