Bagaimana saya bisa mengubah jalur URL Apache Solr default dari "search / apachesolr_search / term" menjadi yang lain?
Bagaimana saya bisa mengubah jalur URL Apache Solr default dari "search / apachesolr_search / term" menjadi yang lain?
Jawaban:
Cara saya biasanya melakukan ini adalah dengan mengimplementasikan hook_menu_alter (). Anda kemudian dapat menyesuaikan url dengan cara yang Anda pilih:
/**
* 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']);
}
}
Bukan hal yang sepele untuk mengubah jalur pencarian jika Anda hanya menggunakan modul pencarian apachesolr. Karena itu tergantung pada modul pencarian inti, jalan hampir-kode keras. Itu tergantung pada search / {module} /% menu_tail. Jika Anda melihat search_view () , panggilan balik untuk modul pencarian, Anda akan menemukan bahwa itu memanggil search_get_keys () , yang mengharapkan kunci pencarian berada di bagian tertentu dari jalur. Modul pencarian apachesolr juga menggunakan fungsi ini untuk mendapatkan kunci, jadi mengimplementasikan hook_menu_alter () yang sederhana tidak akan berfungsi dengan sendirinya.
Seperti disebutkan dalam jawaban lain di sini, jika Anda dapat menjalankan Tampilan 3.x, maka taruhan terbaik Anda adalah menggunakan modul tampilan apachesolr . Dengan modul ini, Anda dapat dengan mudah menentukan sejumlah jalur khusus untuk hasil pencarian.
Jika Anda tidak dapat menjalankan 3.x, maka Anda harus menggunakan kombinasi perubahan bentuk (khususnya, search_form) dan panggilan balik menu khusus untuk berhasil mengubah jalur pencarian default.
Ini akan berfungsi jika Anda meletakkannya di 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;
}
}
}
}
Dan kemudian ketika Anda membuat entri menu, Anda meletakkan tautan ke apache solr: search / apachesolr_search /? Filter = tid: 13
Dan buat alias url untuk pencarian / apachesolr_search /? Filter = tid: 13 like products / tv.html
Ditemukan melalui: http://drupal.org/node/783836#comment-4136475
Anda dapat menggunakan tampilan pertama untuk pencarian situs Anda.
Lihat Menambahkan jalur pencarian khusus dengan hook_menu oleh orang-orang di Evolving Web. Itu berbicara tentang bagaimana mereka menulis modul khusus untuk membuat URL ramah untuk pencarian Solr mereka. Anda mungkin perlu mengubah sedikit, tetapi ini adalah titik awal yang baik.
Bagaimana dengan membuat panggilan balik menu baru seperti berikut untuk membuat hasil pengembalian apachesolr di jalur itu?
$menu['search']['page callback'] = 'apachesolr_search_view';
Atau Anda bisa memodifikasi modul yang berkontribusi yang melakukan ini: Apache Solr Custom Path .
Jika Anda hanya ingin mengubah pencarian / apachesolr_search / ke sesuatu yang lain, misalnya 'inventaris', Anda dapat mencoba modul pengalihan Global .
Caranya adalah dengan membuat 2 alias - satu untuk pencarian / apachesolr_search / (untuk item faceted) dan yang lainnya tanpa trailing slash (untuk halaman pencarian utama). Pengalihan global mungkin menolak untuk membuat 2 alias untuk tujuan yang sama, tetapi Anda dapat memasukkannya ke db secara langsung.