it-swarm-vi.com

Làm cách nào để thay đổi URL tìm kiếm Apache Solr?

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?

12
markdorison

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']);
  }
}
3
q0rban

Đ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 trình đơn, bạn đặt liên kết tới 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

4
realityloop

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 () , cuộc 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 sẽ ở một vị trí cụ thể một phần của con đường. 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.

4
jhedstrom

Bạn có thể sử dụng solr lượt xem cho tìm kiếm trang web của bạn.

  1. Tạo một cái nhìn solr.
  2. Thêm một màn hình trang với đường dẫn bạn muốn
  3. Thêm văn bản tìm kiếm dưới dạng bộ lọc.
  4. Hình thức tiếp xúc trong khối
  5. Đặt khối nơi bạn muốn hộp tìm kiếm của bạn đi.
3
Jeremy French

Hãy xem Thêm đường dẫn tìm kiếm tùy chỉnh với hook_men 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 Tweak nó một chút, nhưng đó là một điểm khởi đầu tốt.

2
Benedict Steele

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 .

1
Ivan Alfaro

Đ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';
1
markdorison

Nếu bạn chỉ muốn thay đổi tìm kiếm/apachesolr_search/thành một thứ khác, ví dụ 'hàng tồn kho', bạn có thể thử Chuyển hướng toàn cầ mô-đun.

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.

0
gansbrest