Як я можу змінити шлях URL-адреси Apache Solr за умовчанням з "search / apachesolr_search / term" на щось інше?
Як я можу змінити шлях URL-адреси Apache Solr за умовчанням з "search / apachesolr_search / term" на щось інше?
Відповіді:
Як правило, я це робив - це реалізувати mock_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']);
}
}
Змінювати шлях пошуку нетривіально, якщо ви використовуєте лише модуль пошуку apachesolr. Оскільки це залежить від основного модуля пошуку, шлях майже кодований. Це залежить від пошуку / {module} /% menu_tail. Якщо ви подивитеся на search_view () , зворотний виклик модуля пошуку, ви побачите, що він викликає search_get_keys () , який очікує, що ключові слова будуть знаходитися в певній частині шляху. Модуль пошуку apachesolr також використовує цю функцію для отримання ключів, тому реалізація простого_ук_мену_alter () не працюватиме самостійно.
Як було сказано в іншій відповіді тут, якщо ви зможете запустити Views 3.x, то найкраще скористатися модулем перегляду apachesolr . За допомогою цього модуля ви можете легко визначити будь-яку кількість користувацьких шляхів для результатів пошуку.
Якщо ви не можете запустити 3.x, вам знадобиться використовувати комбінацію змін форми (зокрема, search_form) та зворотних викликів меню, щоб успішно змінити шлях пошуку за замовчуванням.
Це має спрацювати, якщо розмістити його в 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
І створити псевдонім URL для пошуку / apachesolr_search /? Filters = tid: 13 like products / tv.html
Знайдено через: http://drupal.org/node/783836#comment-4136475
Ви можете використовувати solr перегляди для пошуку свого сайту.
Перевірте Додавання користувальницьких шляхів пошуку за допомогою гам_меню хлопцями в Evolving Web. У ньому йдеться про те, як вони написали спеціальний модуль для створення дружніх URL-адрес для пошуку Solr. Напевно, вам потрібно буде трохи підправити це, але це хороша відправна точка.
Що щодо створення нового зворотного виклику меню, наприклад, наступного, щоб зробити повернення результатів apachesolr на цьому шляху?
$menu['search']['page callback'] = 'apachesolr_search_view';
Або ви можете просто змінити внесений модуль, який робить це: Apache Solr Custom Path .
Якщо ви просто хочете змінити search / apachesolr_search / на щось інше, наприклад "інвентар", ви можете спробувати модуль глобального переадресації .
Трюк полягає у створенні двох псевдонімів - одного для пошуку / apachesolr_search / (для гранічних елементів) та іншого без зворотного косого риса (для головної сторінки пошуку). Глобальне переспрямування може відмовитись створити 2 псевдоніми для того ж пункту призначення, але ви можете вставити його безпосередньо в db.