2

現時点では、node_search_executeに渡されるオプションのリストに「現在の言語」を強制しようとしています。残念ながら、関数フックを配置する適切な場所を見つけるのに苦労しています。おそらく私は何か簡単なものが欠けています。

これをどのように実装するかについて、2つの基本的な可能性にたどり着きました。

(1)実装hook_search_infoおよびhook_search_execute

この場合、コードをコピーしnode_search_executeて、検索クエリに「AND Language='$current_language'」を追加する行を追加します。

mythemename_search_infoテーマフォルダに関数を追加しようとしましたmythemename_search_executeが、実行されません。実行時。

 function mythemename_search_info() {
    return array(
        'title' => 'Content', 
        'path' => 'node', 
        'conditions_callback' => 'mythemename_search_execute',
    );
 }

 function mythemename_search_execute($keys = NULL, $conditions = NULL){
    return array();
 }

この例では、オーバーライドが実行されていることを確認できるように「結果なし」を取得したいので、完全な検索機能を実装します。

(2)実装hook_search_preprocess()

私も試しましたmythemename_search_preprocess()

 function mythemename_search_preprocess($text) {
   // Do processing on $text
    echo $text; die();
    $text = "french";
   return $text;
 }

しかし、繰り返しになりますが、期待した結果が得られません(テキストが少し入った白いページ)

したがって、私が何をしていても、これらの検索フックは検出されません。

何が欠けていますか?それらはおそらくモジュールに含まれている必要がありますか?

4

2 に答える 2

3

はい、モジュール内にある必要があります。ほとんどのフックはモジュールに対してのみ呼び出され、テーマに対しては呼び出されません。これに対する最も注目すべき例外は、両方に対して呼び出されるテーマ/前処理フックです。

カスタムモジュールを作成するのが非常に簡単になる前に作成したことがない場合は、ここに貴重なガイドがあります。

于 2011-12-12T23:01:13.417 に答える
1

を使用しhook_search_info()、カスタムモジュールで使用しました。「フック」をモジュール名に置き換えました。'title'のタブを作成することができました。そして、hook_search_executeの結果配列を渡しました。これにより、検索ページのタブの下に結果が表示され始めました。したがって、新しいモジュールを確実に作成すると、新しい検索タブを含めるのに役立ちます。hook_search_execute()hook_search_access()hook_search_info()

于 2012-08-14T15:23:35.893 に答える