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)
有没有办法对此级别的查询采取行动?或者任何其他方法吗?
答案 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