Question

Comment puis-je modifier le chemin URL par défaut Apache Solr de "Recherche / apachesolr_search / terme" à autre chose?

Était-ce utile?

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:

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: 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

Vous pouvez utiliser des vues solr pour votre recherche de site.

  1. Créer une vue Solr.
  2. Ajoutez un écran avec le chemin que vous voulez
  3. Ajouter texte de recherche comme un filtre.
  4. forme exposée dans le bloc
  5. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top