デフォルトのApache Solr URLパスを「search/apachesolr_search/term」から別のURLパスに変更するにはどうすればよいですか?
私が通常これを行った方法は、hook_menu_alter()を実装することです。次に、選択したとおりにURLをカスタマイズできます。
/**
* Implements hook_menu_alter().
*/
function example_menu_alter(&$menu) {
// Ensure Apache Solr is the default and that the menu item exists.
if (variable_get('apachesolr_search_make_default', 0) && isset($menu['search/apachesolr/%menu_tail'])) {
$menu['search/%menu_tail'] = $menu['search/apachesolr/%menu_tail'];
unset($menu['search/apachesolr/%menu_tail']);
}
}
これは、settings.phpに配置すると機能します。
function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
// Filter to get only the Apache solr links with filters so it doesn't launch it for every link of our website
if ($path == 'search/apachesolr_search/' && strpos($options['query'], 'filters') !== FALSE) {
$new_path = $path.'?'.urldecode($options['query']);
// See if we have a url_alias for our new path
$sql = 'SELECT dst FROM {url_alias} WHERE src="%s"';
$row = db_result(db_query($sql, $new_path));
// If there is a dst url_alia, we change the path to it and erase the query
if ($row) {
$path = $row;
$options['query'] = '';
}
}
}
function custom_url_rewrite_inbound(&$result, $path, $path_language) {
// See if we have a url_alias for our new path
$sql = 'SELECT src FROM {url_alias} WHERE dst="%s"';
$row = db_result(db_query($sql, $path));
if ($row) {
// We found a source path
$parts = preg_split('/[\?\&]/', $row);
if (count($parts) > 1) {
$result = array_shift($parts);
// That's important because on my website, it doesn't work with the / at the end of result
if ($result[strlen($result) - 1] == '/') {
$result = substr($result, 0, strlen($result) - 1);
}
// Create the $_GET with the filter
foreach ($parts as $part) {
list($key, $value) = explode('=', $part);
$_GET[$key] = $value;
// Add this because the pager use the $_REQUEST variable to be set
$_REQUEST[$key] = $value;
}
}
}
}
そして、メニューエントリを作成するときに、Apache solrへのリンクを配置します。search/apachesolr_search /?filters = tid:13
そして、search/apachesolr_search /?filters = tid:13のURLエイリアスをproducts/tv.htmlのように作成します
Apachesolr検索モジュールのみを使用している場合、検索パスを変更するのは簡単ではありません。コア検索モジュールに依存するため、パスはほぼハードコーディングされています。 search/{module} /%menu_tailに依存します。検索モジュールのコールバックである search_view() を見ると、それが search_get_keys() を呼び出していることがわかります。パスの一部。 apachesolr検索モジュールもこの関数を使用してキーを取得するため、単純なhook_menu_alter()の実装はそれ自体では機能しません。
ここで別の回答で述べたように、Views 3.xを実行できる場合、最善の策は apachesolr views module を使用することです。このモジュールを使用すると、検索結果のカスタムパスをいくつでも簡単に定義できます。
3.xを実行できない場合は、フォームの変更(具体的にはsearch_form)とカスタムメニューコールバックの組み合わせを使用して、デフォルトの検索パスを正常に変更する必要があります。
solr views をサイト検索に使用できます。
Evolving Webのメンバーによる hook_menuを使用したカスタム検索パスの追加 を確認してください。 Solrの検索用にわかりやすいURLを作成するためのカスタムモジュールの作成方法について説明します。少し調整する必要があるかもしれませんが、それは良い出発点です。
または、これを行うコントリビュートされたモジュールを変更することもできます: Apache Solrカスタムパス 。
Apachesolrがそのパスで結果を返すようにするには、次のような新しいメニューコールバックを作成しますか?
$menu['search']['page callback'] = 'apachesolr_search_view';
Search/apachesolr_search /を他の何か、たとえば「在庫」に変更したいだけの場合、 Global redirect モジュールを試すことができます。
トリックは、2つのエイリアスを作成することです。1つはsearch/apachesolr_search /(ファセットアイテム用)であり、もう1つは末尾のスラッシュなし(メイン検索ページ用)です。グローバルリダイレクトは、同じ宛先に対して2つのエイリアスを作成することを拒否する場合がありますが、dbに直接挿入できます。