Вопрос

Как я могу изменить путь URL Apache Solr по умолчанию с «SEARCE/APACHESOLR_SEARCH/TERM» на что -то еще?

Это было полезно?

Решение

То, как я обычно делал это, - это реализовать 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 () не будет работать самостоятельно.

Как упомянуто в другом ответе здесь, если вы можете запустить просмотры 3.x, то лучше всего использовать Apachesolr Views Module. Анкет С помощью этого модуля вы можете легко определить любое количество пользовательских путей для результатов поиска.

Если вы не можете запустить 3.x, то вам нужно использовать комбинацию Form Alter (в частности, Search_form) и пользовательских вызовов меню, чтобы успешно изменить путь поиска по умолчанию.

Это должно работать, если вы разместите его в настройки.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 как продукты/tv.html

Найдено через: http://drupal.org/node/783836#comment-4136475

Вы могли бы использовать Solr виды Для поиска вашего сайта.

  1. Создайте представление Solr.
  2. Добавьте отображение страницы с желаемым путем
  3. Добавьте текст поиска в качестве фильтра.
  4. Открытая форма в блоке
  5. Поместите блок, куда вы хотите, чтобы ваш поиск пошел.

Проверить Добавление пользовательских путей поиска с помощью Hook_menu парни из развивающейся паутины. В нем говорится о том, как они написали пользовательский модуль для создания дружественных URL -адресов для своих поисков Solr. Вам, вероятно, нужно немного настроить это, но это хорошая отправная точка.

А как насчет создания нового обратного вызова меню, например, для того, чтобы принести результаты возврата Apachesolr на этом пути?

$menu['search']['page callback'] = 'apachesolr_search_view';

Или вы можете просто изменить внесенный модуль, который делает это: Apache Solr пользовательский путь.

Если вы просто хотите изменить поиск/ apachesolr_search/ на что -то еще, например, «инвентарь», вы можете попробовать Глобальный перенаправление модуль.

Хитрость заключается в том, чтобы создать 2 псевдонимы - один для поиска/ apachesolr_search/ (для озадаченных элементов) и еще один, не следуя за чертой (для основной страницы поиска). Global Redirect может отказаться от создания 2 псевдонимов для одного и того же пункта назначения, но вы можете вставить его в DB напрямую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top