You are here

向Better Exposed Filters模块提交了一个补丁

g089h515r806 的头像
Submitted by g089h515r806 on 星期四, 2014-05-22 10:40

已经很久没有向官方网站提交代码,今天因为工作的原因,使用Better Exposed Filters模块,想将items per page暴露(expose)出来,这个在views里面是可以的,不过默认是下拉选择框的形式。
我想使用 Better Exposed Filters将它转为链接的形式,发现没有配置选线,通过Google查找,在Drupal6的时候,已经解决了这个问题,但是在Drupal7下,有人又遇到了同样的情况。https://drupal.org/node/1618206.
我检查Better Exposed Filters模块的代码,发现他已经提供了这样的功能,只是没有显示出来,这个if语句出了问题:
if (isset($this->display->display_options['pager']) && !empty($this->display->display_options['pager']['options']['expose']['items_per_page'])) {

我将它修改为:
if (TRUE) {
配置选项就出来了,就可以设置为链接的形式,不过这样的话,不管有没有设置成expose,都会显示出来相应的配置选项。
这是一个bug,我决定修正它。我不断的使用var_export,print debug().var_dump等函数查看变量,views的变量会嵌套,导致无法显示正确的信息,好在var_dump可以避免嵌套,这是我今天学到的。
输出出来的信息,非常的长,而且格式也不好,600+多行的输出,然后自己手动的调整格式,使其格式良好,这样可以获取到$this->display的结构,只有找到对应的结构,才能够做出正确的判断。
经过一下午的努力,终于搞定了这个问题,并提交了一个补丁:
diff --git a/better_exposed_filters_exposed_form_plugin.inc b/better_exposed_filters_exposed_form_plugin.inc
index 4231892..981fcad 100644
--- a/better_exposed_filters_exposed_form_plugin.inc
+++ b/better_exposed_filters_exposed_form_plugin.inc
@@ -148,7 +148,17 @@ Title Desc|Z -> A

Leave the replacement value blank to remove an option al
/*
* Add options for exposed pager.
*/
- if (isset($this->display->display_options['pager']) && !empty($this->display->display_options['pager']['options']['expose']['items_per_page'])) {
+ $pager_exposed = FALSE;
+ $current_display_name = $this->display->handler->view->current_display;
+ $current_display = $this->display->handler->view->display[$current_display_name];
+ $default_display = $this->display->handler->view->display['default'];
+ if (!empty($current_display->handler->options['defaults']["pager"])) {
+ $pager_exposed = isset($default_display->handler->options['pager']) && !empty($default_display->handler->options['pager']['options']['expose']['items_per_page']);
+ }
+ else {
+ $pager_exposed = isset($current_display->handler->options['pager']) && !empty($current_display->handler->options['pager']['options']['expose']['items_per_page']);
+ }
+ if ($pager_exposed) {
$bef_options['pager']['bef_format'] = array(
'#type' => 'select',
'#title' => t('Display exposed pager options as'),

需要将var_dump里面变量的输出,复制到编辑器里面,然后手动的调整格式,不然肉眼是识别不出来结构信息的。虽然很辛苦,但是解决了这样的一个问题,以提交patch的形式,能够帮助很多遇到同样需求的开发者。

论坛:

Drupal版本: