D7视图暴露形式:以编程方式更改分类术语选择

时间:2014-02-09 22:13:09

标签: drupal drupal-7 drupal-views

Drupal 7.26,Views 7.x-3.7

我有一个带有公开表单过滤器的视图,其中一个是分类术语选择:您选择一个或多个术语来显示具有该术语的节点,或者您不选择任何内容并且您拥有完整的节点列表。

选择窗口小部件类型为“自动填充”,这意味着:当您键入一些与术语名称不完全匹配的文本时,您会出错。我可以设法隐藏错误(视图配置),但我想要的是:

假设您在词汇表中有这些术语:“5星级酒店”,“4星级酒店”,“3星级酒店”和“私人公寓”

如果某人输入“酒店”并点击提交(未选择任何特定字词),我想显示包含“酒店”一词的任何字词的结果(在这种情况下,我的词汇表中的前3个字词)

我尝试了hook_query_alter,但$ condition ['field']是受保护的ConditionObject,所以我无法更改它

function MYMODULE_views_query_alter($view, &$query) {
  if ( $view->name === "search" ) {
    foreach ($query->where as &$condition_group) {
      foreach ($condition_group['conditions'] as $conditionKey => &$condition) {
        if( is_object( $condition['field'] ) ){
          drupal_set_message($condition['field']);
        }
      }
    }
  }
}

输出:

  

(field_data_field_keywords_value_0.field_keywords_tid =   :db_condition_placeholder_2)

有没有办法对此级别的查询采取行动?或者任何其他方法吗?

1 个答案:

答案 0 :(得分:0)

是。这里有一些选项,例如:https://drupal.stackexchange.com/questions/76651/how-to-use-hook-views-query-alter-to-modify-where-condition

最简单的方法是尝试这样的东西(你当前有drupal_set_message):

$condition['field']->condition('field_data_field_keywords_value_0.field_keywords_tid like "%hotel%"' , '');

我其实不确定它是完全正确的:(

条件的文档:https://api.drupal.org/api/drupal/includes%21database%21query.inc/class/DatabaseCondition/7