0

我尝试实现一个新模块,该模块捕获默认搜索表单中编写的键并显示默认搜索结果页面以外的其他结果。使用这些其他结果,我将进行一个外部查询,该查询放在一个特殊的块中。

关于如何做到这一点的任何想法?

我尝试使用自定义模块制作“hook_alter_form”但没有成功。

换句话说 :

我有这样的功能:

 function my_function_name_form_alter(&$form,&$form_state,$form_id){ 
     switch($form_id){ 
      case 'search-block-form':
     //Here i want to catch the text that i wrote in the search box 
     break; 
    } 
  }

感谢你!

4

1 回答 1

0

您可以更改搜索查询以显示其他结果:

function mymodule_query_alter(QueryAlterableInterface $query){
  $is_search = FALSE;
  foreach ($query->getTables() as $table) {
    if ($table['table'] == 'search_index') {
      $is_search = TRUE;
    }
  }

 if ($is_search) {
    global $language; 

    $db_or = db_or();
    $db_or->condition('n.type', 'event', '=');
    $db_or->condition('n.type', 'real_sitio', '=');
    $query->condition($db_or);

    $query->condition('n.language' , $language->language, '=');
 } 
}

这是一个性能杀手,所以http://drupal.org/node/1435834上有一个 drupal 补丁,它添加了一个挂钩,可以直接在搜索查询中进行更改:

所以最后它看起来像:

function mymodule_search_query_search_node_alter(&$query) {
  $query->condition('n.type', 'article', '=');
}
于 2012-11-02T13:22:11.447 回答