Domanda

Come faccio a cambiare il percorso di Apache Solr URL predefinito da "Ricerca / apachesolr_search / termine" a qualcos'altro?

È stato utile?

Soluzione

Il modo in cui ho fatto questo genere è quello di implementare hook_menu_alter (). È quindi possibile personalizzare l'URL nel modo esatto che si sceglie:

/**
 * 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']);
  }
}

Altri suggerimenti

E non è banale per modificare il percorso di ricerca, se si utilizza solo il modulo di ricerca apachesolr. Poiché dipende dal modulo di ricerca di base, il percorso è quasi hard-coded. Dipende {module} / ricerca /% menu_tail. Se si guarda a search_view () , il callback per il modulo di ricerca, vi accorgerete che si chiama search_get_keys () , che prevede le chiavi di ricerca per essere in una particolare parte del percorso. Il modulo di ricerca apachesolr utilizza anche questa funzione per ottenere le chiavi, in modo da attuare un semplice hook_menu_alter () non funziona da solo.

Come detto in un'altra risposta qui, se si è in grado di eseguire Visualizzazioni 3.x, allora la cosa migliore è quella di utilizzare il apachesolr vista modulo . Con questo modulo, si può facilmente definire qualsiasi numero di percorsi personalizzati per i risultati di ricerca.

Se non è possibile eseguire 3.x, allora avrete bisogno di utilizzare una combinazione di forma Alter (in particolare, search_form) e callback menu personalizzato con successo cambiare il percorso di ricerca predefinito.

Questo dovrebbe funzionare se lo si inserisce in 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;
      }
    }
  }
}

E poi, quando si crea una voce di menu, si mette il link per Apache Solr: ricerca / apachesolr_search / filtri = tid: 13

E creare un alias URL per ricerca / apachesolr_search / filtri = tid:? 13 come i prodotti / tv.html

Trovato tramite: http://drupal.org/node/783836#comment-4136475

Si potrebbe usare solr vista per la ricerca del sito.

  1. Creare una vista solr.
  2. Aggiungi una visualizzazione della pagina con il percorso che si desidera
  3. Aggiungi testo di ricerca come filtro.
  4. forma Esposto nel blocco
  5. Mettere il blocco in cui si desidera che la casella di ricerca per andare.

Visualizza il Aggiunta di percorsi di ricerca personalizzati con hook_menu dai ragazzi di Evolving Web. Si parla di come hanno scritto un modulo personalizzato per creare URL amichevoli per le loro ricerche Solr. Avrete probabilmente bisogno di modificare un po ', ma è un buon punto di partenza.

Che dire di creazione di un nuovo callback menù come segue per rendere apachesolr risultati di ritorno in quel percorso?

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

oppure si può semplicemente modificare un modulo contribuito che fa questo:. Apache Solr personalizzato percorso

Se si desidera solo per il cambio di / apachesolr_search / a qualcos'altro, ad esempio 'inventario', si può provare globale reindirizzamento modulo.

Il trucco è quello di creare 2 alias - uno per la ricerca / apachesolr_search / (per gli elementi sfaccettati) e un altro senza lo slash (per la pagina di ricerca principale). reindirizzamento globale potrebbe rifiutarsi di creare 2 alias per la stessa destinazione, ma è possibile inserirlo nel db direttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top