il est dommage que le message de q0rban ait été voté autant de fois, car cela ne fonctionnera pas - jhedstrom donne une description détaillée de la raison pour laquelle le fait de remplacer le chemin avec hook_menu_alter plantera et brûlera.
aaronbauman
Réponses:
3
La façon dont j'ai généralement fait cela est d'implémenter 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']);}}
Il n'est pas trivial de changer le chemin de recherche si vous utilisez uniquement le module de recherche apachesolr. Comme cela dépend du module de recherche principal, le chemin est presque codé en dur. Cela dépend de la recherche / {module} /% menu_tail. Si vous regardez search_view () , le rappel du module de recherche, vous constaterez qu'il appelle search_get_keys () , qui s'attend à ce que les clés de recherche se trouvent dans une partie particulière du chemin. Le module de recherche apachesolr utilise également cette fonction pour obtenir des clés, donc l'implémentation d'un simple hook_menu_alter () ne fonctionnera pas de lui-même.
Comme mentionné dans une autre réponse ici, si vous pouvez exécuter Views 3.x, alors votre meilleur pari est d'utiliser le module de vues apachesolr . Avec ce module, vous pouvez facilement définir n'importe quel nombre de chemins personnalisés pour les résultats de recherche.
Si vous ne pouvez pas exécuter 3.x, vous devrez utiliser une combinaison de modifications de formulaire (en particulier, search_form) et de rappels de menus personnalisés pour modifier avec succès le chemin de recherche par défaut.
Cela devrait fonctionner si vous le placez dans 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 websiteif($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 queryif($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 resultif($result[strlen($result)-1]=='/'){
$result = substr($result,0, strlen($result)-1);}// Create the $_GET with the filterforeach($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;}}}}
Et puis quand vous créez une entrée de menu, vous mettez le lien vers apache solr: search / apachesolr_search /? Filters = tid: 13
Et créez un alias d'URL pour la recherche / apachesolr_search /? Filters = tid: 13 comme les produits / tv.html
Découvrez Ajouter des chemins de recherche personnalisés avec hook_menu par les gars d'Evolving Web. Il explique comment ils ont écrit un module personnalisé pour créer des URL conviviales pour leurs recherches Solr. Vous devrez probablement l'ajuster un peu, mais c'est un bon point de départ.
Si vous voulez simplement changer la recherche / apachesolr_search / en quelque chose d'autre, par exemple 'inventaire', vous pouvez essayer le module de redirection globale .
L'astuce consiste à créer 2 alias - un pour la recherche / apachesolr_search / (pour les éléments à facettes) et un autre sans barre oblique (pour la page de recherche principale). La redirection globale peut refuser de créer 2 alias pour la même destination, mais vous pouvez l'insérer directement dans la base de données.
Réponses:
La façon dont j'ai généralement fait cela est d'implémenter hook_menu_alter (). Vous pouvez ensuite personnaliser l'URL de la manière exacte que vous choisissez:
la source
Il n'est pas trivial de changer le chemin de recherche si vous utilisez uniquement le module de recherche apachesolr. Comme cela dépend du module de recherche principal, le chemin est presque codé en dur. Cela dépend de la recherche / {module} /% menu_tail. Si vous regardez search_view () , le rappel du module de recherche, vous constaterez qu'il appelle search_get_keys () , qui s'attend à ce que les clés de recherche se trouvent dans une partie particulière du chemin. Le module de recherche apachesolr utilise également cette fonction pour obtenir des clés, donc l'implémentation d'un simple hook_menu_alter () ne fonctionnera pas de lui-même.
Comme mentionné dans une autre réponse ici, si vous pouvez exécuter Views 3.x, alors votre meilleur pari est d'utiliser le module de vues apachesolr . Avec ce module, vous pouvez facilement définir n'importe quel nombre de chemins personnalisés pour les résultats de recherche.
Si vous ne pouvez pas exécuter 3.x, vous devrez utiliser une combinaison de modifications de formulaire (en particulier, search_form) et de rappels de menus personnalisés pour modifier avec succès le chemin de recherche par défaut.
la source
Cela devrait fonctionner si vous le placez dans settings.php:
Et puis quand vous créez une entrée de menu, vous mettez le lien vers apache solr: search / apachesolr_search /? Filters = tid: 13
Et créez un alias d'URL pour la recherche / apachesolr_search /? Filters = tid: 13 comme les produits / tv.html
Trouvé via: http://drupal.org/node/783836#comment-4136475
la source
Vous pouvez utiliser des vues solr pour votre recherche sur le site.
la source
Découvrez Ajouter des chemins de recherche personnalisés avec hook_menu par les gars d'Evolving Web. Il explique comment ils ont écrit un module personnalisé pour créer des URL conviviales pour leurs recherches Solr. Vous devrez probablement l'ajuster un peu, mais c'est un bon point de départ.
la source
Qu'en est-il de la création d'un nouveau rappel de menu comme le suivant pour que apachesolr renvoie des résultats sur ce chemin?
la source
Ou vous pouvez simplement modifier un module contribué qui le fait: Apache Solr Custom Path .
la source
Si vous voulez simplement changer la recherche / apachesolr_search / en quelque chose d'autre, par exemple 'inventaire', vous pouvez essayer le module de redirection globale .
L'astuce consiste à créer 2 alias - un pour la recherche / apachesolr_search / (pour les éléments à facettes) et un autre sans barre oblique (pour la page de recherche principale). La redirection globale peut refuser de créer 2 alias pour la même destination, mais vous pouvez l'insérer directement dans la base de données.
la source