Жаль, что за пост q0rban проголосовали так много раз, потому что он не сработает - jhedstrom дает подробное описание того, почему простое переопределение пути с помощью hook_menu_alter приведет к сбою и сгоранию.
aaronbauman
Ответы:
3
Обычно я делаю это для реализации 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']);}}
Нетрудно изменить путь поиска, если вы используете только модуль поиска apachesolr. Поскольку это зависит от основного модуля поиска, путь почти жестко закодирован. Это зависит от поиска / {module} /% menu_tail. Если вы посмотрите на search_view () , обратный вызов для поискового модуля, вы обнаружите, что он вызывает search_get_keys () , который ожидает, что ключи поиска находятся в определенной части пути. Модуль поиска apachesolr также использует эту функцию для получения ключей, поэтому реализация простого hook_menu_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 websiteif($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 queryif($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 resultif($result[strlen($result)-1]=='/'){
$result = substr($result,0, strlen($result)-1);}// Create the $_GET with the filterforeach($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
Проверьте добавление пользовательских путей поиска с помощью hook_menu ребятами из Evolving Web. В нем рассказывается о том, как они написали собственный модуль для создания удобных URL-адресов для своих поисков в Solr. Возможно, вам придется немного его настроить, но это хорошая отправная точка.
Если вы просто хотите изменить search / apachesolr_search / на что-то другое, например, «инвентарь», вы можете попробовать модуль Global redirect .
Хитрость заключается в том, чтобы создать 2 псевдонима - один для поиска / apachesolr_search / (для граненых элементов), а другой - без косой черты (для главной страницы поиска). Глобальный редирект может отказать в создании 2 псевдонимов для одного и того же места назначения, но вы можете вставить его в базу данных напрямую.
Ответы:
Обычно я делаю это для реализации hook_menu_alter (). Затем вы можете настроить URL-адрес точно так, как вы выберете:
источник
Нетрудно изменить путь поиска, если вы используете только модуль поиска apachesolr. Поскольку это зависит от основного модуля поиска, путь почти жестко закодирован. Это зависит от поиска / {module} /% menu_tail. Если вы посмотрите на search_view () , обратный вызов для поискового модуля, вы обнаружите, что он вызывает search_get_keys () , который ожидает, что ключи поиска находятся в определенной части пути. Модуль поиска apachesolr также использует эту функцию для получения ключей, поэтому реализация простого hook_menu_alter () не будет работать сама по себе.
Как уже упоминалось в другом ответе, если вы можете запустить Views 3.x, лучше всего использовать модуль представлений apachesolr . С помощью этого модуля вы можете легко определить любое количество пользовательских путей для результатов поиска.
Если вы не можете запустить 3.x, вам нужно будет использовать комбинацию изменения формы (в частности, search_form) и пользовательских обратных вызовов меню, чтобы успешно изменить путь поиска по умолчанию.
источник
Это должно работать, если вы поместите его в settings.php:
И затем, когда вы создаете пункт меню, вы помещаете ссылку на 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 просмотров для поиска по сайту.
источник
Проверьте добавление пользовательских путей поиска с помощью hook_menu ребятами из Evolving Web. В нем рассказывается о том, как они написали собственный модуль для создания удобных URL-адресов для своих поисков в Solr. Возможно, вам придется немного его настроить, но это хорошая отправная точка.
источник
Как насчет создания нового обратного вызова меню, подобного следующему, чтобы apachesolr возвращал результаты по этому пути?
источник
Или вы можете просто изменить предоставленный модуль, который делает это: Apache Solr Custom Path .
источник
Если вы просто хотите изменить search / apachesolr_search / на что-то другое, например, «инвентарь», вы можете попробовать модуль Global redirect .
Хитрость заключается в том, чтобы создать 2 псевдонима - один для поиска / apachesolr_search / (для граненых элементов), а другой - без косой черты (для главной страницы поиска). Глобальный редирект может отказать в создании 2 псевдонимов для одного и того же места назначения, но вы можете вставить его в базу данных напрямую.
источник