デフォルトの検索モジュールに条件を追加するにはどうすればよいですか?
ノードに「検索を許可」というチェックボックスを追加したいのですが、チェックを外した項目は検索結果に表示されません。
Drupal 7 検索を拡張することが私の解決策のように思えますが、それを機能させることはできません。hook_search_execute()
実行されません。
なぜこれが起こるのか説明できますか?
デフォルトの検索モジュールに条件を追加するにはどうすればよいですか?
ノードに「検索を許可」というチェックボックスを追加したいのですが、チェックを外した項目は検索結果に表示されません。
Drupal 7 検索を拡張することが私の解決策のように思えますが、それを機能させることはできません。hook_search_execute()
実行されません。
なぜこれが起こるのか説明できますか?
最初に admin/config/search/settings でモジュールを選択し、場合によっては「アクティブな検索モジュール」で Node モジュールを選択解除する必要があります。そこでモジュールが選択されていない場合、フックは呼び出されません。
1 つのフックが呼び出され、1 つのフックが呼び出されない理由については、search_get_info() (検索メニューを構築するために search_menu() から呼び出される関数) によって実行されるコードは、最初にのすべての実装を呼び出しhook_search_info()
、次にどのモジュールをチェックするかをチェックします。検索統合が有効になっています。モジュールで検索統合が有効になっていないhook_search_execute()
ため、モジュールが呼び出されることはありません。
if (!isset($search_hooks)) {
foreach (module_implements('search_info') as $module) {
$search_hooks[$module] = call_user_func($module . '_search_info');
// Use module name as the default value.
$search_hooks[$module] += array(
'title' => $module,
'path' => $module,
);
// Include the module name itself in the array.
$search_hooks[$module]['module'] = $module;
}
}
if ($all) {
return $search_hooks;
}
$active = variable_get('search_active_modules', array('node', 'user'));
return array_intersect_key($search_hooks, array_flip($active));