Frage

Wie ändere ich die Standard-Apache-Solr URL-Pfad aus "suchen/apachesolr_search/term" auf etwas anderes?

War es hilfreich?

Lösung

Die Art und Weise, wie ich dies normalerweise getan habe, besteht darin, Hook_Menu_alter () zu implementieren. Sie können dann die URL genau so anpassen, wie Sie es auswählen:

/**
 * 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']);
  }
}

Andere Tipps

Es ist nicht trivial, den Suchpfad zu ändern, wenn Sie nur das Apachesolr-Suchmodul verwenden. Da es vom Kernsuchmodul abhängt, ist der Pfad nahezu codiert. Es hängt von der Suche/{Modul}/%Menü_tail ab. Wenn Sie sich ansehen search_view (), Wenn der Rückruf für das Suchmodul feststellt, dass es ruft search_get_keys (), was erwartet, dass die Suchschlüssel in einem bestimmten Teil des Pfades liegen. Das Apachesolr -Suchmodul verwendet diese Funktion auch, um Tasten zu erhalten. Die Implementierung eines einfachen Hook_Menu_Agerter () funktioniert nicht für sich.

Wie in einer anderen Antwort hier erwähnt, ist die beste Wahl, wenn Sie Ansichten 3.x ausführen können Apachesolr Views Modul. Mit diesem Modul können Sie problemlos eine beliebige Anzahl von benutzerdefinierten Pfaden für Suchergebnisse definieren.

Wenn Sie 3.x nicht ausführen können, müssen Sie eine Kombination aus Formularänderung (insbesondere search_form) und benutzerdefinierte Menü -Rückrufe verwenden, um den Standard -Suchpfad erfolgreich zu ändern.

Dies sollte funktionieren, wenn Sie legen Sie es in 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;
      }
    }
  }
}

Und dann, wenn Sie ein Menü erstellen den Eintrag, stellen Sie die Verbindung zu apache solr :Suche/apachesolr_search/?filters=tid:13

Und erstellen Sie einen url-alias für die Suche/apachesolr_search/?filters=tid:13 wie products/tv.html

Gefunden über: http://drupal.org/node/783836#comment-4136475

Du könntest benutzen Solr -Ansichten Für Ihre Site -Suche.

  1. Erstellen Sie eine Solr -Ansicht.
  2. Fügen Sie eine Seitenanzeige mit dem gewünschten Pfad hinzu
  3. Fügen Sie Suchtext als Filter hinzu.
  4. Exponierte Form im Block
  5. Setzen Sie den Block, wohin Sie möchten, dass Ihr Suchfeld gehen soll.

Kasse Hinzufügen benutzerdefinierter Suchpfade mit Hook_Menu von den Jungs von Evolving Web. Es wird darüber gesprochen, wie sie ein benutzerdefiniertes Modul geschrieben haben, um freundliche URLs für ihre Solr -Suche zu erstellen. Sie müssen es wahrscheinlich ein bisschen optimieren, aber es ist ein guter Ausgangspunkt.

Was ist mit dem Erstellen eines neuen Menürufs wie folgt, um die Ergebnisse von Apachesolr auf diesem Pfad zurückzugeben?

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

Oder Sie können einfach ein zustimmtes Modul ändern, das dies ausmacht: Apache Solr Custom Path.

Wenn Sie nur die Suche/ apachesolr_search/ auf etwas anderes ändern möchten, zum Beispiel "Inventar", können Sie es versuchen Globale Umleitung Modul.

Der Trick besteht darin, 2 Aliase zu erstellen - eine für die Suche/ apachesolr_search/ (für facettierte Elemente) und eine ohne nachgezogenes Schrägstrich (für die Hauptsuchseite). Global Redirect kann sich weigern, 2 Aliase für dasselbe Ziel zu erstellen, aber Sie können es direkt in die DB einfügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top