Apache Solr arama URL'sini nasıl değiştirebilirim?


12

Varsayılan Apache Solr URL yolunu "arama / apachesolr_search / term" den başka bir şeye nasıl değiştirebilirim?


3
q0rban'ın gönderisinin birçok kez oy kullanması çok kötü, çünkü işe yaramayacak - jhedstrom, hook_menu_alter ile yolu geçersiz kılmanın neden çökeceğini ve yanacağını ayrıntılı bir şekilde açıklıyor.
aaronbauman

Yanıtlar:


3

Genellikle bunu yaptığım şekilde hook_menu_alter () uygulamaktır. Daha sonra URL'yi tam olarak seçtiğiniz şekilde özelleştirebilirsiniz:

/**
 * 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

Yalnızca apachesolr arama modülünü kullanıyorsanız arama yolunu değiştirmek önemsizdir. Çekirdek arama modülüne bağlı olduğu için yol neredeyse sabit olarak kodlanmıştır. Bu, arama / {module} /% menu_tail öğesine bağlıdır. Eğer bakarsanız search_view () , arama modülü için geri arama, bunu çağırır olduğunu göreceksiniz ) (search_get_keys arama tuşları yolunun belli bir kısmında olmasını bekler, hangi. Apachesolr arama modülü de anahtarları almak için bu işlevi kullanır, bu nedenle basit bir hook_menu_alter () uygulamak kendi başına çalışmaz.

Burada başka bir cevapta belirtildiği gibi, Views 3.x'i çalıştırabiliyorsanız, en iyi bahsiniz apachesolr views modülünü kullanmaktır . Bu modülle, arama sonuçları için istediğiniz sayıda özel yolu kolayca tanımlayabilirsiniz.

3.x çalıştıramazsanız, varsayılan arama yolunu başarılı bir şekilde değiştirmek için form değiştirme (özellikle arama_formu) ve özel menü geri çağrılarının bir birleşimini kullanmanız gerekir.


4

Settings.php dosyasına yerleştirirseniz bu işe yarayacaktır.

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;
      }
    }
  }
}

Sonra bir menü girişi oluşturduğunuzda, apache solr: search / apachesolr_search /? Filters = tid: 13 bağlantısını koyarsınız.

Ve arama / apachesolr_search /? Filters = tid: 13 benzeri ürün / tv.html için bir URL takma adı oluşturun

Yoluyla bulundu: http://drupal.org/node/783836#comment-4136475


Bunun D6 için olduğunu hissediyorum. Soru sorulduğu gibi D7 için kolayca uyarlanabilir mi?
pushka

3

Site aramanız için solr görünümlerini kullanabilirsiniz .

  1. Solr görünümü oluşturun.
  2. İstediğiniz yolu içeren bir sayfa görüntüleme ekleyin
  3. Arama metnini filtre olarak ekleyin.
  4. Blokta açık form
  5. Bloğu arama kutunuzun gitmesini istediğiniz yere yerleştirin.

Bu işe yaramıyor
AnAnD


1

Bu yolda apachesolr sonuçları döndürmek için aşağıdaki gibi yeni bir menü geri araması oluşturmaya ne dersiniz?

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


0

Search / apachesolr_search / öğesini başka bir şeye (örneğin 'envanter') değiştirmek istiyorsanız, Global yönlendirme modülünü deneyebilirsiniz .

İşin püf noktası, biri arama / apachesolr_search / (yönlü öğeler için) ve diğeri sondaki eğik çizgi olmadan (ana arama sayfası için) olmak üzere 2 takma ad oluşturmaktır. Genel yönlendirme, aynı hedef için 2 takma ad oluşturmayı reddedebilir, ancak doğrudan db'ye ekleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.