wiki

Custom filtre pre Drupal 7 views

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);
}
}
}