drupal 自定义视图过滤器
Posted
技术标签:
【中文标题】drupal 自定义视图过滤器【英文标题】:drupal custom views filter 【发布时间】:2013-10-15 07:17:52 【问题描述】:第一次使用***,所以我会尽量说清楚。
我正在使用 drupal 7 和视图 3。 我需要创建一个处理日期范围的自定义视图过滤器。因此,我查看了示例并尝试模仿该行为,但遇到了一些麻烦。 似乎当我从 views_handler_filter 扩展我自己的类时,查询方法永远不会被调用但是如果我从让我们说 views_handler_filter_string 扩展我的类,它可以工作oO ...
我必须忘记一些事情,但我被困在这里...... 这是我的代码,如果有人可以看看并告诉我发生了什么,我将非常感激。
谢谢大家!
这是我的 .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')
);
【问题讨论】:
【参考方案1】:我正在解决同样的问题。我的设置看起来很像你的,虽然我确实在我的value_form
函数中调用了parent::value_form($form, $form_state)
。
我发现在 value_form 函数中,我必须有类似的东西
$form['value'] = array(
'#type' => 'checkbox',
'#title' => "Filter by Date",
'#default_value' => $this->value,
);
为了调用我的query()
函数。做类似$form['value']['before'] = array( ...
没用。
【讨论】:
以上是关于drupal 自定义视图过滤器的主要内容,如果未能解决你的问题,请参考以下文章
Drupal 6 中的自定义搜索表单:视图/面板还是自定义 sql?
使用选择性覆盖的Drupal视图的术语(而非分类)的自定义分类法页面