Per*_*Per 6 php drupal views drupal-views drupal-7
即时通讯使用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;
}
Run Code Online (Sandbox Code Playgroud)
FILE clicks_handler_filter.inc:
<?php
class clicks_handler_filter extends views_handler_filter {
???
};
Run Code Online (Sandbox Code Playgroud)
我知道这两个功能都是错的;)
小智 5
好的,我找到了解决方案.对于任何需要它的人:
在clicks.module中
function clicks_views_api() {
return array(
'api' => 2,
'path' => drupal_get_path('module', 'clicks') . '/includes'
);
}
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
在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, ">");
}
}
Run Code Online (Sandbox Code Playgroud)
这使我有可能添加过滤器"点击",如果启用,则会隐藏所有没有点击的结果(clicks_left> 0)
实际上,如果表点击中的值是数字,则无需创建自己的处理程序,您可以使用 Views 中的默认值views_handler_filter_numeric。
您可以看到 Views 中已存在的所有处理程序handlers。
| 归档时间: |
|
| 查看次数: |
11898 次 |
| 最近记录: |