Wie kann ich den standardmäßigen Apache Solr-URL-Pfad von "search / apachesolr_search / term" in einen anderen ändern?
Wie kann ich den standardmäßigen Apache Solr-URL-Pfad von "search / apachesolr_search / term" in einen anderen ändern?
Antworten:
Normalerweise habe ich dazu hook_menu_alter () implementiert. Sie können die URL dann genau so anpassen, wie Sie es möchten:
/**
* 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']);
}
}
Es ist nicht trivial, den Suchpfad zu ändern, wenn Sie nur das Suchmodul apachesolr verwenden. Da dies vom Kern des Suchmoduls abhängt, ist der Pfad nahezu fest codiert. Dies hängt von search / {module} /% menu_tail ab. Wenn Sie search_view () , den Rückruf für das Suchmodul, betrachten, werden Sie feststellen, dass search_get_keys () aufgerufen wird , wodurch erwartet wird, dass sich die Suchschlüssel in einem bestimmten Teil des Pfads befinden. Das Suchmodul von apachesolr verwendet diese Funktion auch zum Abrufen von Schlüsseln, sodass die Implementierung eines einfachen hook_menu_alter () allein nicht funktioniert.
Wie in einer anderen Antwort hier erwähnt, ist die beste Wahl , wenn Sie Views 3.x ausführen können, das Modul apachesolr views zu verwenden . Mit diesem Modul können Sie einfach beliebig viele benutzerdefinierte Pfade 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 benutzerdefinierten Menürückrufen verwenden, um den Standardsuchpfad erfolgreich zu ändern.
Dies sollte funktionieren, wenn Sie es in settings.php platzieren:
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 wenn Sie dann einen Menüeintrag erstellen, setzen Sie den Link zu apache solr: search / apachesolr_search /? Filters = tid: 13
Und erstelle einen URL-Alias für search / apachesolr_search /? Filters = tid: 13 like products / tv.html
Gefunden über: http://drupal.org/node/783836#comment-4136475
Sie können solr-Ansichten für Ihre Site-Suche verwenden.
Check out Hinzufügen von benutzerdefinierten Suchpfaden mit hook_menu von den Jungs von Evolving Web. Es geht darum, wie sie ein benutzerdefiniertes Modul geschrieben haben, um benutzerfreundliche URLs für ihre Solr-Suchen zu erstellen. Sie müssen es wahrscheinlich etwas anpassen, aber es ist ein guter Ausgangspunkt.
Wie wäre es, einen neuen Menü-Callback wie den folgenden zu erstellen, damit apachesolr auf diesem Pfad Ergebnisse zurückgibt?
$menu['search']['page callback'] = 'apachesolr_search_view';
Oder Sie können einfach ein dazu beigetragenes Modul ändern: Apache Solr Custom Path .
Wenn Sie search / apachesolr_search / nur in etwas anderes ändern möchten, z. B. "Inventar", können Sie das Global Redirect- Modul ausprobieren .
Der Trick besteht darin, zwei Aliase zu erstellen - eines für search / apachesolr_search / (für facettierte Elemente) und eines ohne abschließenden Schrägstrich (für die Hauptsuchseite). Die globale Umleitung kann es möglicherweise ablehnen, zwei Aliase für dasselbe Ziel zu erstellen, Sie können sie jedoch direkt in die Datenbank einfügen.