मैं व्यू 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;
}