我正在使用Drupal 7,我想在视图中添加一个新的过滤器。
我有两个字段的“点击”自定义表格; nid和clicks_left。
过滤器应该只包含一个复选框“仅显示剩余点击的节点”。所以过滤器应该加入节点并点击nid ..
我已阅读了数千页的自定义过滤器,但无法使其工作=)
拜托,有人能告诉我一个工作实例,所以我明白了吗?
我到目前为止,过滤器显示在过滤器下但是我需要添加什么来进行连接并获取复选框?以下相关代码:
FILE clicks_views.inc:
function clicks_views_data() {
$data = array();
$data['clicks']['clicks_filter'] = array(
'group' => t('Clicks'),
'title' => t('Clicks left'),
'help' => t('Filter any Views based on clicks left'),
'filter' => array(
'field' => 'clicks_left',
'handler' => 'clicks_handler_filter',
),
);
return $data;
}
FILE clicks_handler_filter.inc:
<?php
class clicks_handler_filter extends views_handler_filter {
???
};
我知道这两个功能都是错误的;)
答案 0 :(得分:5)
好的,我找到了解决方案。对于任何需要它的人:
在clicks.module
中function clicks_views_api() {
return array(
'api' => 2,
'path' => drupal_get_path('module', 'clicks') . '/includes'
);
}
在clicks.views.inc
中function clicks_views_handlers() {
return array(
'info' => array(
'path' => drupal_get_path('module', 'clicks') . '/includes', // path to view files
),
'handlers' => array(
// register our custom filter, with the class/file name and parent class
'clicks_handler_filter' => array(
'parent' => 'views_handler_filter',
)
),
);
}
function clicks_views_data() {
$data = array();
if(module_exists('clicks')) {
$data['node']['clicks'] = array(
'group' => t('Clicks'),
'title' => t('Clicks left'),
'help' => t('Filter any Views based on clicks left'),
'filter' => array(
'handler' => 'clicks_handler_filter',
),
);
}
return $data;
}
在clicks_handler_filter.inc
中class clicks_handler_filter extends views_handler_filter {
function admin_summary() { }
function operator_form() { }
function query() {
$table = $this->ensure_my_table();
$join = new views_join();
$join->construct('clicks', $this->table_alias, 'nid', 'nid');
$this->query->ensure_table('clicks', $this->relationship, $join);
$this->query->add_where($this->options['group'], "clicks.clicks_left", 0, ">");
}
}
这使我有可能添加过滤器“点击次数”,如果启用则会隐藏所有没有点击的结果(clicks_left&gt; 0)
答案 1 :(得分:0)
实际上,如果您的表格中的值是数字的,您不需要创建自己的处理程序,您可以使用Views views_handler_filter_numeric
中的默认值。
您可以查看视图handlers
中已存在的所有处理程序。