Làm cách nào tôi có thể thay đổi đường dẫn URL Solr mặc định từ "search / apachesolr_search / term" sang thứ khác?
Làm cách nào tôi có thể thay đổi đường dẫn URL Solr mặc định từ "search / apachesolr_search / term" sang thứ khác?
Câu trả lời:
Cách tôi thường làm điều này là triển khai hook_menu_alter (). Sau đó, bạn có thể tùy chỉnh url theo cách chính xác mà bạn chọn:
/**
* 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']);
}
}
Việc thay đổi đường dẫn tìm kiếm là không tầm thường nếu bạn chỉ sử dụng mô-đun tìm kiếm apachesolr. Vì nó phụ thuộc vào mô-đun tìm kiếm cốt lõi, đường dẫn gần như được mã hóa cứng. Nó phụ thuộc vào tìm kiếm / {module} /% menu_tail. Nếu bạn nhìn vào search_view () , gọi lại cho mô-đun tìm kiếm, bạn sẽ thấy rằng nó gọi search_get_keys () , dự kiến các khóa tìm kiếm nằm trong một phần cụ thể của đường dẫn. Mô-đun tìm kiếm apachesolr cũng sử dụng chức năng này để lấy các khóa, do đó, việc triển khai một hook_menu_alter () đơn giản sẽ không tự hoạt động.
Như đã đề cập trong một câu trả lời khác ở đây, nếu bạn có thể chạy Lượt xem 3.x, thì cách tốt nhất của bạn là sử dụng mô-đun lượt xem apachesolr . Với mô-đun này, bạn có thể dễ dàng xác định bất kỳ số lượng đường dẫn tùy chỉnh nào cho kết quả tìm kiếm.
Nếu bạn không thể chạy 3.x, thì bạn sẽ cần sử dụng kết hợp các thay đổi biểu mẫu (cụ thể là search_form) và các cuộc gọi lại menu tùy chỉnh để thay đổi thành công đường dẫn tìm kiếm mặc định.
Điều này sẽ hoạt động nếu bạn đặt nó trong 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;
}
}
}
}
Và sau đó khi bạn tạo một mục menu, bạn đặt liên kết đến apache solr: search / apachesolr_search /? Filter = tid: 13
Và tạo một bí danh url cho tìm kiếm / apachesolr_search /? Filter = tid: 13 like sản phẩm / tv.html
Tìm thấy qua: http://drupal.org/node/783836#comment-4136475
Bạn có thể sử dụng lượt xem solr cho tìm kiếm trang web của bạn.
Kiểm tra Thêm đường dẫn tìm kiếm tùy chỉnh với hook_menu bởi những kẻ tại Evolve Web. Nó nói về cách họ đã viết một mô-đun tùy chỉnh để tạo các URL thân thiện cho các tìm kiếm Solr của họ. Có lẽ bạn sẽ cần phải điều chỉnh nó một chút, nhưng đó là một điểm khởi đầu tốt.
Điều gì về việc tạo một cuộc gọi lại menu mới như sau để làm cho apachesolr trả về kết quả tại đường dẫn đó?
$menu['search']['page callback'] = 'apachesolr_search_view';
Hoặc bạn chỉ có thể sửa đổi một mô-đun đóng góp thực hiện điều này: Đường dẫn tùy chỉnh Apache Solr .
Nếu bạn chỉ muốn thay đổi tìm kiếm / apachesolr_search / thành một thứ khác, ví dụ như 'hàng tồn kho', bạn có thể thử mô-đun chuyển hướng Toàn cầu .
Mẹo nhỏ là tạo 2 bí danh - một cho tìm kiếm / apachesolr_search / (cho các mục có khía cạnh) và một mục khác không có dấu gạch chéo (cho trang tìm kiếm chính). Chuyển hướng toàn cầu có thể từ chối tạo 2 bí danh cho cùng một đích, nhưng bạn có thể chèn trực tiếp vào db.