/search/node
にあるコアのデフォルトの検索ページで、このURIにアクセスすると、ページに「検索結果はありませんでした」と表示されます。検索結果がまったくないキーワードが入力されたかどうか、およびキーワードが入力されていない場合に、このメッセージが表示されます。 「検索結果がありませんでした」と表示するのは奇妙です。ユーザーが実際に何かをまだ検索していないときに。
このメッセージを削除する最も適切な方法は何ですかキーワードが入力されていない場合?
最初に、この文字列がどのようにしてそこに到達したかを調べます。コードベースで正確な文字列_Your search yielded no results.
_を検索するだけです。バニラDrupalでは、この文字列は6回しか見つかりません。テストでは5回、コントローラーでは1回、SearchControllerのみです。
SearchControllerを見ると、この文字列がレンダー配列の一部であることがわかります。 _'#empty'
_としてキー付けされ、'#theme' => ['item_list__search_results__' . $plugin->getPluginId(), 'item_list__search_results'],
でテーマ化されます。これは、前処理関数を使用して非常に簡単にそれをターゲットにできることを意味します。まだプラグインを知らないので、_item_list__search_results
_に行きましょう。
テーマまたはモジュールに_hook_preprocess_HOOK
_を実装します。 hook
をテーマまたはモジュールのマシン名に置き換え、HOOK
を以前の_'#theme'
_キーに置き換えます。
次に、if \Drupal::request()->query->has('keys')
を介して検索クエリが入力されているかどうかを確認します。安全のため、_'empty'
_に_$variables
_キーがあるかどうかを確認し、設定を解除します。必要に応じて、_$variables['context']['plugin']
_にあるプラグインでも条件を厳しくできます。
_/**
* Implements hook_preprocess_HOOK().
*/
function MYMODULE/MYTHEME_preprocess_item_list__search_results(&$variables) {
// ksm($variables);
if (!\Drupal::request()->query->has('keys') && isset($variables['empty'])) {
unset($variables['empty']);
}
}
_
ヒント: DevelサブモジュールのKintとそのデバッグ関数ksm()
を使用して、サイトのメッセージブロックに変数をきれいに出力し、簡単にデバッグできます。