कस्टम फ़िल्टर हैंडलर में क्वेरी विधि ट्रिगर नहीं हुई?


9

मैं व्यू 3 का इस्तेमाल कर रहा हूं ।

मुझे एक कस्टम व्यू फिल्टर बनाने की जरूरत थी जो डेट रेंज को हैंडल करे। इसलिए मैंने उदाहरण देखा और व्यवहार की नकल करने की कोशिश की और मुझे कुछ परेशानी हुई।

ऐसा लगता है कि जब मैं अपनी कक्षा का विस्तार करता हूं views_handler_filter, तो क्वेरी विधि कभी भी लागू नहीं होती है, लेकिन अगर मैं अपनी कक्षा का विस्तार views_handler_filter_stringकरता हूं तो यह कहें कि यह काम करता है।

मुझे कुछ भूलना चाहिए लेकिन मैं यहां फंसा हुआ हूं।

यहाँ मेरा कोड है, अगर कोई देख सकता है और मुझे सलाह दे सकता है कि क्या हुआ, मैं बहुत आभारी रहूंगा।

यहाँ मेरी .views.incफ़ाइल है:

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

 }
?>

और मेरी .moduleफाइल

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

और मेरे हिस्से में views_dataजो मेरे कस्टम फ़िल्टर का उपयोग करते हैं:

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

किस क्षेत्र के लिए आप कस्टम फ़िल्टर (फ़ील्ड एपीआई या कस्टम तालिका) की मैपिंग कर रहे हैं।
मथानकुमार

1
यह एक sql व्यू (v_tp_voice) है जिसे एक्सटर्नल डेटाबेस से लिया गया है जिसे समोन कहा जाता है। इसलिए मैं एक कस्टम टेबल पर मैपिंग कर रहा हूं।
d4rkfl4sh

1
पता नहीं कैसे यह वर्णित प्रभाव को भड़का सकता है, लेकिन मैंने हमेशा सोचा था कि फ़िल्टर वर्ग एक अलग फ़ाइल में होना चाहिए और आपकी .info फ़ाइल में भी सजा दी जानी चाहिए। यह इस सवाल से स्पष्ट नहीं है कि क्या मामला है।
बेर्लिनर

हाँ आपको विस्तार करना होगा! (उर्फ आपकी समस्या क्या है?)
rémy

दिनांक फ़ील्ड मॉड्यूल का उपयोग क्यों नहीं किया जाता है? इसमें विचारों के साथ एक उप-मॉड्यूल एकीकरण है। मुझे यकीन नहीं है कि यह सब कुछ आप चाहते हैं, लेकिन यह एक कोशिश के काबिल हो सकता है।
ओडिनोव

जवाबों:


1

जैसा कि ओडिनोव ने सुझाव दिया है , आप ड्रुपल कंट्रिब मॉड्यूल डेट का उपयोग इसके उप मॉड्यूल डेट व्यूज के साथ कर सकते हैं, जो कि संभवत: व्यूज में किसी भी तरह के फिल्टर को संभालेंगे। यदि यह मदद नहीं करता है, तो आप इसे हुक_ साक्षात्कार_क्वेरी_ल्टर लागू करके कोड के माध्यम से प्राप्त कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.