내가 사용하고 보기 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;
}
사용자 정의 필터 (필드 API 또는 사용자 정의 테이블)를 매핑하는 필드
—
Mathankumar
equalone이라는 외부 데이터베이스에서 가져온 SQL 뷰 (v_tp_voice)입니다. 그래서 나는 사용자 정의 테이블에 매핑하고 있습니다.
—
d4rkfl4sh 2016 년
이것이 효과를 유발할 수있는 방법을 모르지만 필터 클래스는 별도의 파일에 있어야하며 .info 파일에서도 참조되어야한다고 생각했습니다. 그것이 사실인지는 확실하지 않습니다.
—
베를린
예, 당신은 확장해야합니다! (일명 문제가 무엇입니까?)
—
rémy
날짜 필드 모듈을 사용하지 않는 이유는 무엇입니까? 뷰와 하위 모듈 통합이 있습니다. 나는 그것이 당신이 원하는 모든 것을 할 것이라고 확신하지는 않지만 시도해 볼 가치가 있습니다.
—
todinov