Comment puis-je changer l'URL de recherche Apache Solr?
Question
Comment puis-je modifier le chemin URL par défaut Apache Solr de "Recherche / apachesolr_search / terme" à autre chose?
La solution
La façon dont je l'ai fait généralement est de mettre en œuvre hook_menu_alter (). Vous pouvez ensuite personnaliser l'URL de la manière exacte que vous choisissez:
/**
* 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']);
}
}
Autres conseils
Il est non trivial de changer le chemin de recherche si vous utilisez uniquement le module de recherche de apachesolr. Comme il dépend du module de recherche de base, le chemin est presque codé en dur. Cela dépend de la recherche / {Module} /% menu_tail. Si vous regardez search_view () , le rappel pour le module de recherche, vous trouverez qu'il appelle search_get_keys () , qui attend les clés de recherche d'être dans une partie du chemin. Le module de recherche apachesolr utilise également cette fonction pour obtenir les clés, donc la mise en œuvre d'un simple hook_menu_alter () ne fonctionnera pas sur lui-même.
Comme mentionné dans une autre réponse ici, si vous êtes en mesure d'exécuter 3.x Vues, ??votre meilleur pari est d'utiliser le
Cela devrait fonctionner si vous le placez dans settings.php: Et puis lorsque vous créez une entrée de menu, vous mettez le lien vers Apache Solr: Recherche / apachesolr_search / filtres = tid: 13 Et créer un alias url pour les filtres de recherche / apachesolr_search / = tid: 13 produits similaires / tv.html Trouvé via: http://drupal.org/node/783836#comment-4136475 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;
}
}
}
}
Vous pouvez utiliser des vues solr pour votre recherche de site.
- Créer une vue Solr.
- Ajoutez un écran avec le chemin que vous voulez
- Ajouter texte de recherche comme un filtre.
- forme exposée dans le bloc
- Placez le bloc où vous voulez que votre zone de recherche pour aller.
Vérifiez Ajout des chemins de recherche personnalisés avec hook_menu par les gars Evolving Web. Il parle de la façon dont ils ont écrit un module personnalisé pour créer des URL conviviales pour leurs recherches Solr. Vous aurez probablement besoin de ruser un peu, mais il est un bon point de départ.
Qu'en est-il de créer un nouveau rappel de menu comme suit pour faire apachesolr les résultats de retour à ce chemin?
$menu['search']['page callback'] = 'apachesolr_search_view';
Ou vous pouvez simplement modifier un module Apportée qui le fait. Apache Solr chemin personnalisé
Si vous voulez juste changer la recherche / apachesolr_search / à quelque chose d'autre, par exemple « inventaire », vous pouvez essayer global Module redirect.
L'astuce est de créer 2 alias - une pour la recherche / apachesolr_search / (pour les éléments à facettes) et un autre sans slash (pour la page de recherche). redirect mondiale pourrait refuser de créer 2 alias pour la même destination, mais vous pouvez l'insérer dans le db directement.