কাস্টম ফিল্টার হ্যান্ডলারে ক্যোরি পদ্ধতিটি ট্রিগার হয়নি?


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
এটি একটি বর্গক্ষেত্রের ভিউ (v_tp_voice) যা বহিরাগত ডাটাবেস থেকে নেওয়া বলে সমান বলে called তাই আমি একটি কাস্টম টেবিলের উপর ম্যাপিং করছি।
d4rkfl4sh

1
কীভাবে এটি বর্ণিত প্রভাবকে উস্কে দিতে পারে জানি না, তবে আমি সর্বদা ভেবেছিলাম যে ফিল্টার বর্গ অবশ্যই একটি পৃথক ফাইলে থাকতে হবে এবং আপনার .info ফাইলটিতেও রেফারেন্স করা হবে। এটা কেস কিনা তা প্রশ্ন থেকে পরিষ্কার নয়।
বার্লিনার

হ্যাঁ আপনাকে প্রসারিত করতে হবে! (ওরফে আপনার সমস্যা কি?)
রম্য

তারিখের ক্ষেত্রের মডিউলটি কেন ব্যবহার করবেন না? এর সাথে ভিউ সহ একটি উপ-মডিউল ইন্টিগ্রেশন রয়েছে। আমি নিশ্চিত নই যে এটি আপনার পছন্দমতো সবকিছু করবে তবে এটি চেষ্টা করে দেখার মতো হতে পারে।
টোডিনভ

উত্তর:


1

টোডিনভের পরামর্শ অনুসারে , আপনি এর সাব মডিউলটির তারিখের সাথে ড্রপাল অবদানকারী মডিউলগুলির তারিখ ব্যবহার করতে পারেন যা সম্ভবত ভিউগুলিতে কোনও ধরণের ফিল্টার পরিচালনা করতে পারে। যদি এটি সহায়তা না করে তবে আপনি কোডের মাধ্যমে হুক_ভিউ_কোয়ারি_াল্টার প্রয়োগ করে এটি অর্জন করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.