Drupal 7.26,视图7.x-3.7
我有一个带有公开表单过滤器的视图,其中一个是分类术语选择:您选择一个或多个术语来显示具有该术语的节点,或者您什么都不选择,您就有了完整的节点列表。
选择小部件的类型是"自动完成",这意味着:当您键入与术语名称不完全匹配的文本时,就会出现错误。我可以设法隐藏错误(查看配置),但我想要的是:
假设你的词汇中有这些术语:"五星级酒店"、"四星级酒店","三星级酒店"one_answers"私人公寓">
当有人键入"酒店"并点击提交(不选择任何特定术语)时,我想显示包含"酒店"一词的任何术语的结果(在这种情况下,是我词汇表中的前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)
是否有方法在此级别对查询执行操作?或者有其他方法可以做到这一点?
是。这里有一些选项,例如: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