Abfragemethode im benutzerdefinierten Filterhandler nicht ausgelöst?

9

Ich verwende Ansichten 3 .

Ich musste einen benutzerdefinierten Ansichtsfilter erstellen, der den Datumsbereich behandelt. Also habe ich mir ein Beispiel angesehen und versucht, das Verhalten nachzuahmen, und ich habe Probleme bekommen.

Es scheint, dass beim Erweitern meiner eigenen Klasse von views_handler_filterdie Abfragemethode nie aufgerufen wird, ABER wenn ich meine Klasse von erweitern möchte, sagen wir, dass views_handler_filter_stringes funktioniert.

Ich muss etwas vergessen, aber ich stecke hier fest.

Hier ist mein Code. Wenn jemand einen Blick darauf werfen und mich beraten kann, was passiert ist, wäre ich sehr dankbar.

Hier ist meine .views.incDatei:

<?php
  class v3d_date_custom_filter extends views_handler_filter {
    var $always_multiple = TRUE;

    function value_form(&$form, &$form_state) {
      //parent::value_form($form, $form_state);
      $form['value']['v3d_date']['period'] = array(
        '#type' => 'select',
        '#title' => 'Period',
        '#options' => array(
          '7_days' => 'Last 7 days',
          'yesterday' => 'Yesterday',
          'today' => 'Today',
          'custom' => 'Custom dates'),
        '#default_value' => 'custom',
        '#attributes' => array("onclick" => "period_click(this);"),
      );

      $form['value']['v3d_date']['start_date'] = array(
        '#type' => 'date_popup',
        '#date_format' => 'Y-m-d',
        '#title' => 'Start date',
        '#size' => 30);

      $form['value']['v3d_date']['end_date'] = array(
        '#type' => 'date_popup',
        '#title' => 'End date',
        '#date_format' => 'Y-m-d',
        '#size' => 30);
      }

   function exposed_validate(&$form, &$form_state) {

     if(is_null($form_state['values']['start_date']) &&
        is_null($form_state['values']['start_date'])) {
        return TRUE;
     }


    /*
     * If we get array for start_date or end_date
     * errors occured, but the date module will handle it.
     */
     if(!is_string($form_state['values']['start_date']) ||
        !is_string($form_state['values']['end_date'])) {
       return TRUE;
     }


     /* Get day, month and year from start_date string */
     if(!preg_match('/(\d+)-(\d+)-(\d+)/',
        $form_state['values']['start_date'],
        $start_date
        )) {
       return TRUE; }

     /* Get day, month and year from end_date string */
     if(!preg_match('/(\d+)-(\d+)-(\d+)/',
        $form_state['values']['end_date'],
        $end_date
     )) {
       return TRUE; }

     /* Create timestamps and compare */
     $start_date = mktime(0,0,0,$start_date[1],$start_date[2],$start_date[3]);
     $end_date = mktime(0,0,0,$end_date[1],$end_date[2],$end_date[3]);

     if($start_date >= $end_date) {
       form_set_error('start_date','Start date must be anterior to end date.');
     }
   }

   function query() {
     die('fdsfds');
     $this->ensure_my_table();
     $field = "$this->table_alias.$this->real_field";
     dsm($this);
   }

 }
?>

Und meine .moduleAkte

<?php
  function custom_filters_views_api() {
    return array(
      'api'=>3,
      'path' => drupal_get_path('module','custom_filters') . '/views',
    );
  }
?>

Und ein Teil von mir views_data, der meinen benutzerdefinierten Filter verwendet:

<?php                                                                                      

function voice_views_data() {

  $data['v_tp_voice']['date_utc_agent'] = array(
    'title' => t('date_utc_agent'),
    'help' => 'date_utc_agent',
    'field' => array('handler' => 'views_handler_field'),
    'filter' => array('handler' => 'v3d_date_custom_filter'),
    'sort' => array('handler' => 'views_handler_sort')
  );

  return $data;
}
d4rkfl4sh
quelle
Zu welchem ​​Feld ordnen Sie den benutzerdefinierten Filter (Feld-API oder benutzerdefinierte Tabelle) zu.
Mathankumar
1
Es ist eine SQL-Ansicht (v_tp_voice) aus einer externen Datenbank namens Equalone. Ich bin also auf einer benutzerdefinierten Tabelle abgebildet.
d4rkfl4sh
1
Ich weiß nicht, wie das den beschriebenen Effekt hervorrufen könnte, aber ich dachte immer, dass die Filterklasse in einer separaten Datei sein muss und auch in Ihrer .info-Datei referenziert wird. Aus der Frage geht nicht hervor, ob dies der Fall ist.
Berliner
ja du musst verlängern! (aka was ist dein Problem?)
Rémy
Warum nicht das Datumsfeldmodul verwenden? Es hat eine Submodul-Integration mit Ansichten. Ich bin nicht sicher, ob es alles tun wird, was Sie wollen, aber es könnte einen Versuch wert sein.
Todinov

Antworten:

1

Wie von todinov vorgeschlagen , können Sie die Drupal Contrib-Module Date zusammen mit dem Untermodul Date Views verwenden, die höchstwahrscheinlich alle Arten von Filtern in Views verarbeiten. Wenn es nicht hilft, können Sie es durch Code erreichen, indem Sie hook_views_query_alter implementieren .

Immanuel Paul
quelle