Drupal Global:组合字段过滤器

时间:2014-06-06 20:23:15

标签: php drupal-7 drupal-views

该站点使用Drupal 7.26最小安装构建。

我正在尝试在视图中使用Global:Combine Fields Filter在多个字段中查询在创建的表单中输入的相同值。

我注意到使用全局:组合字段过滤器时存在不同的运算符,而不是我可以设置的其他过滤器。

具体来说,似乎没有'介于'运算符之间提供一系列值来搜索。

任何人都可以验证是否是这种情况,如果没有,为什么它无法显示'介于'运算符?

1 个答案:

答案 0 :(得分:1)

很抱歉,对您来说可能会迟到,但我会为搜索解决方案的人解答此问题。

首先,您必须创建自定义模块。

mymodule.module文件中:

<?php 
/**
 * Implements hook_views_api()
 */
function custom_views_filter_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'MYMODULE'),
  );
}

然后你必须创建一个mymodule.views.inc文件。在这个文件中,我使用了以下钩子:hook_views_query_alter()

/**
 * Implements hook_views_query_alter(&$view, &$query)
 */
function MYMODULE_views_query_alter(&$view, &$query) {

  if ( $view->name == 'MYVIEWNAME' && $view->current_display == 'MYVIEWDISPLAY' ) {
    $conditions = &$query->where[1]['conditions'];

    foreach($conditions as $k => $q) {
      if( $q['operator'] == 'formula' && preg_match('/SOME-STRING/', $q['field']) ) {
     //the preg_match here is just to be sure I'm altering the right WHERE condition so I can use the Global filter again in this display if needed. 

        $conditions[$k]['field'] = ":views_combine BETWEEN field_data_field_NAME1.field_NAME1_value AND field_data_field_NAME2.field_NAME2_value";
        //original "field": "CONCAT_WS(' ', field_data_field_NAME1.field_NAME1_value, ' ', field_data_field_NAME2.field_NAME2_value) LIKE :views_combine"

      }
    }
    //you can delete your "variable by reference"
    unset($conditions);
  }
}

幸运的是,它有效! :-)。只是说我的数值在哪里。所以要测试其他类型的值。

希望它有所帮助。