web-dev-qa-db-ja.com

現在のページが検索結果ページかどうかを判断するにはどうすればよいですか?

現在のページがApache solr検索結果ページであるかどうかをモジュールまたはテーマ内から判断するにはどうすればよいですか?

6
markdorison

モジュールから特定しようとしている場合は、arg()関数を使用して、パス引数を介してページが検索結果ページであるかどうかを確認できます。

if (arg(0) == 'search') {
  TRUE
}
else {
  FALSE
}
6
Camsoft

テーマの観点からは、単純に使用できます

<?php if ($search_results) : ?>
    <!-- Do this on search results pages -->
<?php endif; ?>

$search_resultsは、検索結果ページが表示されている場合にのみtrueを返します。

結果自体のスタイル設定を検討している場合は、 search-result.tpl.php を検討することをお勧めします。

2
Paul Jones

ページが検索ページかどうかを確認するには、現在のURLの最初のパス要素がsearchであり、2番目のパス要素がhook_search()を実装するモジュールの名前であることを確認する必要があります。 (一時変数を使用し、コードを読みやすくするために括弧を追加しました。)

_$bool = ((arg(0) == 'search') &&
  ($module == arg(1)) && module_invoke($module, 'search', 'name')
);
if ($bool) {
  // The page is a search page returned from apachesolr.module.
}
_

特定のケースでは、ページがapachesolr.moduleから返された結果ページであるかどうかを確認することを考慮して、コードを次のように簡略化できます。

_if ((arg(0) == 'search') && (arg(1) == 'apachesolr')) {
  // The page is a search page returned from apachesolr.module.
}
_

汎用コードを簡略化できる理由は、モジュールの名前がわかっていることと、そのモジュールが確実にhook_search()を実装していることです。
hook_search()を部分的にのみ実装するモジュールがあるため、最後のパラメーターが_"name"_に等しい場合、汎用コードはhook_search()によって返される値を検証します。少なくとも、OpenSearch Feedのコードをデバッグしているときに発見したこと。

0
kiamlaluno

Solrが検索されたかどうかを確認する場合は、 apachesolr_has_searched() 関数を使用できます。

これは、検索結果ページが表示されているかどうかを示すものではありません。Solrビューの使用を開始すると、検索結果ページの定義はあいまいですが、Solr検索が実行されたかどうかはわかります。

参考までに apachesolr_static_response_cache() はsolrsの応答を提供し、 apachesolr_current_query() はクエリに関する情報を提供します。

0
Jeremy French