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



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

最新更新