繁体   English   中英

在Drupal视图中针对暴露的过滤器的自定义逻辑

[英]Custom logic for exposed filters in a Drupal view

我正在Drupal网站上工作,并希望就此提供一些建议。 当前,用户输入他的等级以获取多种不同的技能。 它存储在CCK整数字段中,并作为包含键/值对1 | Beginner,2 | Intermediate,3 | Advanced的下拉小部件显示给用户。

在视图中,我公开了每个技能的允许值,这些值作为复选框(使用“更好的暴露筛选器”模块显示给用户),然后在可排序的表中列出。 在实践中,用户通常搜索具有“至少技能Y的知识水平X”的人员。 是否有模块或直接方法将允许的值显示为下拉列表,并在查询中使用“大于”运算符而不是“其中之一”?

任何有关如何动态更改查询的过滤器逻辑或WHERE子句的示例代码或建议,将不胜感激。

您想使用hook_views_query_alter() ,虽然我没有专门更改WHERE子句,但已经更改了SORTBY子句,并且两者的思想应该相对相似。

这是一段简短的代码:

function my_module_views_query_alter(&$view, &$query) {
  switch ($view->name) {
    case 'view1':
      $args = _my_module_get_querystring();
      switch ($args['condition']) {
        case 'condition1':
          $query->where[0]['args'][0] = 1;
          break;

        case 'condition2':
          $query->where[0]['args'][0] = 2;
          break;
      }
      break;
  }
}

/**
 * Returns querystring as an array.
 */
function _my_module_get_querystring() {
  $string = drupal_query_string_encode($_REQUEST, array_merge(array('q'), array_keys($_COOKIE)));
  $args = explode('&', $string);
  foreach ($args as $id => $string) {
    unset($args[$id]);
    $string = explode('=', $string);
    $args[$string[0]] = str_replace(' ', '-', $string[1]);
  }
  return $args;
}

这个特殊的片段将允许您使用查询字符串(?condition = condition1)更改WHERE子句,但是您可以更改它以获取所需的参数。

希望这可以帮助。

使用Decipher的样本并花费几个小时阅读和玩耍,我已经获得了一个基本模块,可以很好地满足我的需求。 再次感谢!

如果有人遇到类似的需求,这是我的代码:

<?php
// $Id$
/**
* @file
* Module for modifying the views query to change an EQUALS 
* to a GREATER THAN for specific filters.
*/


function views_greater_than_views_query_alter(&$view, &$query) {

//only implement for views that have Search in their name
    if(strstr($view->name, "search")) {

        $whereclauses = $query->where[0]['clauses'];

        foreach ($whereclauses as $i=>$currentrow) {

            $currentrow = str_replace('= %d', '>= %d', $currentrow);    
            $query->where[0]['clauses'][$i] = $currentrow;
    }

    unset($whereclauses);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM