Metode kueri tidak terpicu di penangan filter kustom?

9

Saya menggunakan Tampilan 3 .

Saya perlu membuat filter Tampilan khusus yang menangani rentang tanggal. Jadi saya melihat contoh dan mencoba meniru perilaku itu dan saya mendapat masalah.

Tampaknya ketika saya memperluas kelas saya sendiri views_handler_filter, metode kueri tidak pernah dipanggil, TAPI jika saya memperluas kelas saya dari katakanlah views_handler_filter_stringitu berfungsi.

Saya harus melupakan sesuatu tetapi saya terjebak di sini.

Ini kode saya, jika seseorang dapat melihat dan memberi tahu saya tentang apa yang terjadi, saya akan sangat berterima kasih.

Ini .views.incfile saya :

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

 }
?>

Dan .modulefile saya

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

Dan bagian dari saya views_datayang menggunakan filter khusus saya:

<?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
sumber
Ke bidang mana Anda memetakan filter khusus (Bidang api atau tabel khusus).
Mathankumar
1
ini merupakan tampilan sql (v_tp_voice) yang diambil dari database eksternal yang disebut equalone. jadi saya memetakan pada tabel khusus.
d4rkfl4sh
1
Tidak tahu bagaimana itu dapat memprovokasi efek yang dijelaskan, tetapi saya selalu berpikir bahwa kelas filter harus dalam file yang terpisah dan dirujuk dalam file .info Anda juga. Tidak jelas dari pertanyaan apakah itu masalahnya.
berliner
ya kamu harus memperpanjang! (alias apa masalah Anda?)
rémy
Mengapa tidak menggunakan modul bidang tanggal? Ini memiliki integrasi sub-modul dengan tampilan. Saya tidak yakin itu akan melakukan semua yang Anda inginkan, tetapi mungkin patut dicoba.
todinov

Jawaban:

1

Seperti yang disarankan oleh todinov , Anda dapat menggunakan modul Drupal contrib Date bersama dengan sub modul Date Views yang kemungkinan besar akan menangani segala jenis filter dalam Views. Jika tidak membantu, Anda dapat mencapainya melalui kode dengan menerapkan hook_views_query_alter .

Immanuel Paul
sumber