web-dev-qa-db-fra.com

Comment puis-je changer l'URL de recherche Apache Solr?

Comment puis-je changer le chemin d'URL par défaut d'Apache Solr de "search/apachesolr_search/term" en autre chose?

12
markdorison

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']);
  }
}
3
q0rban

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

Et puis lorsque 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

4
realityloop

Il n'est pas trivial de changer le chemin de recherche si vous utilisez uniquement le module de recherche apachesolr. Comme il 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 un domaine particulier partie 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 menu personnalisés pour modifier avec succès le chemin de recherche par défaut.

4
jhedstrom

Vous pouvez utiliser vues solr pour votre recherche de site.

  1. Créez une vue solr.
  2. Ajoutez un affichage de page avec le chemin souhaité
  3. Ajoutez du texte de recherche en tant que filtre.
  4. Forme exposée en bloc
  5. Placez le bloc là où vous souhaitez que votre boîte de recherche aille.
3
Jeremy French

Découvrez Ajout de chemins de recherche personnalisés avec hook_men 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 aurez probablement besoin de l'ajuster un peu, mais c'est un bon point de départ.

2
Benedict Steele

Ou vous pouvez simplement modifier un module contribué qui fait cela: Apache Solr Custom Path .

1
Ivan Alfaro

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?

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

Si vous voulez simplement changer la recherche/apachesolr_search/en quelque chose d'autre, par exemple 'inventaire', vous pouvez essayer le module 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.

0
gansbrest