web-dev-qa-db-ja.com

「検索結果がありません」を非表示にするにはどうすればよいですか。検索ページにキーワードが入力されていない場合

/search/nodeにあるコアのデフォルトの検索ページで、このURIにアクセスすると、ページに「検索結果はありませんでした」と表示されます。検索結果がまったくないキーワードが入力されたかどうか、およびキーワードが入力されていない場合に、このメッセージが表示されます。 「検索結果がありませんでした」と表示するのは奇妙です。ユーザーが実際に何かをまだ検索していないときに。

このメッセージを削除する最も適切な方法は何ですかキーワードが入力されていない場合

1
komlenic

最初に、この文字列がどのようにしてそこに到達したかを調べます。コードベースで正確な文字列_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()を使用して、サイトのメッセージブロックに変数をきれいに出力し、簡単にデバッグできます。

3
leymannx