Як я можу змінити URL-адресу пошуку Apache Solr?


12

Як я можу змінити шлях URL-адреси Apache Solr за умовчанням з "search / apachesolr_search / term" на щось інше?


3
це дуже погано, що за пост q0rban так багато разів проголосували, тому що це не спрацює - jhedstrom дає ретельний опис того, чому просто перекриття контуру за допомогою кука_menu_alter вийде з ладу та згорить.
aaronbauman

Відповіді:


3

Як правило, я це робив - це реалізувати 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']);
  }
}

4

Змінювати шлях пошуку нетривіально, якщо ви використовуєте лише модуль пошуку apachesolr. Оскільки це залежить від основного модуля пошуку, шлях майже кодований. Це залежить від пошуку / {module} /% menu_tail. Якщо ви подивитеся на search_view () , зворотний виклик модуля пошуку, ви побачите, що він викликає search_get_keys () , який очікує, що ключові слова будуть знаходитися в певній частині шляху. Модуль пошуку apachesolr також використовує цю функцію для отримання ключів, тому реалізація простого_ук_мену_alter () не працюватиме самостійно.

Як було сказано в іншій відповіді тут, якщо ви зможете запустити Views 3.x, то найкраще скористатися модулем перегляду apachesolr . За допомогою цього модуля ви можете легко визначити будь-яку кількість користувацьких шляхів для результатів пошуку.

Якщо ви не можете запустити 3.x, вам знадобиться використовувати комбінацію змін форми (зокрема, search_form) та зворотних викликів меню, щоб успішно змінити шлях пошуку за замовчуванням.


4

Це має спрацювати, якщо розмістити його в 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


У мене таке відчуття, що це стосується D6. Чи легко адаптуватися до D7, як задано питання?
пушка

3

Ви можете використовувати solr перегляди для пошуку свого сайту.

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

Це не працює
AnAnD

2

Перевірте Додавання користувальницьких шляхів пошуку за допомогою гам_меню хлопцями в Evolving Web. У ньому йдеться про те, як вони написали спеціальний модуль для створення дружніх URL-адрес для пошуку Solr. Напевно, вам потрібно буде трохи підправити це, але це хороша відправна точка.


1

Що щодо створення нового зворотного виклику меню, наприклад, наступного, щоб зробити повернення результатів apachesolr на цьому шляху?

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


0

Якщо ви просто хочете змінити search / apachesolr_search / на щось інше, наприклад "інвентар", ви можете спробувати модуль глобального переадресації .

Трюк полягає у створенні двох псевдонімів - одного для пошуку / apachesolr_search / (для гранічних елементів) та іншого без зворотного косого риса (для головної сторінки пошуку). Глобальне переспрямування може відмовитись створити 2 псевдоніми для того ж пункту призначення, але ви можете вставити його безпосередньо в db.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.