Pregunta

¿Cómo puedo cambiar la ruta de Apache Solr URL por defecto de "buscar / apachesolr_search / término" a otra cosa?

¿Fue útil?

Solución

La forma en que he hecho por lo general se trata de implementar hook_menu_alter (). A continuación, puede personalizar la url de la manera exacta a elegir:

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

Otros consejos

Es no trivial para cambiar la ruta de búsqueda si sólo se está utilizando el módulo de búsqueda apachesolr. Ya que depende del módulo de búsqueda principal, el camino es casi modificable. Depende de la búsqueda / {module} /% menu_tail. Si nos fijamos en search_view () , la devolución de llamada para el módulo de búsqueda, encontrará que llama search_get_keys () , el cual espera que las claves de búsqueda para estar en una parte particular de la ruta. El módulo de búsqueda apachesolr también utiliza esta función para obtener las claves, por lo que la implementación de un hook_menu_alter sencilla () no funcionará por sí sola.

Como se ha mencionado en otra respuesta aquí, si usted es capaz de ejecutar Vistas 3.x, entonces su mejor opción es utilizar el apachesolr vistas módulo de . Con este módulo, se puede definir fácilmente cualquier número de rutas personalizadas para resultados de búsqueda.

Si no puede ejecutar 3.x, entonces usted tendrá que utilizar una combinación de la forma alter (en concreto, search_form) y las devoluciones de llamada menú personalizado para el cambio con éxito la ruta de búsqueda por defecto.

Esto debería funcionar si se coloca en 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;
      }
    }
  }
}

Y a continuación, cuando se crea una entrada de menú, se pone el enlace a Apache Solr: Búsqueda / apachesolr_search / filtros = tid:? 13

Y crear un alias de URL para la búsqueda apachesolr_search filtros / / = tid:? 13 como productos / tv.html

Encontrados través de: http://drupal.org/node/783836#comment-4136475

Solr vistas para su búsqueda del sitio.

  1. Crear una vista Solr.
  2. Añadir una visualización de la página con la ruta que desea
  3. Añadir texto de búsqueda como filtro.
  4. forma expuesta en el bloque
  5. Poner el bloque en el que desea que su cuadro de búsqueda para ir.

Adición de rutas de búsqueda personalizada con hook_menu por los chicos en evolución web. Habla de cómo escribieron un módulo personalizado para crear URLs amigables para sus búsquedas Solr. Es probable que tenga que ajustar un poco, pero es un buen punto de partida.

¿Qué pasa con la creación de una nueva devolución de llamada menú como el siguiente para hacer apachesolr resultados de retorno en ese camino?

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

O usted puede simplemente modificar un módulo contribuido que hace esto:. Apache Solr Custom Path

Si lo que desea es la búsqueda / cambio de apachesolr_search / a otra cosa, por ejemplo 'inventario', que se puede tratar Global redirección módulo.

El truco es crear alias 2 - uno para buscar / apachesolr_search / (para los artículos facetas) y otro sin barra final (para la página principal de búsqueda). redirección global podría negarse a crear 2 alias para el mismo destino, pero se puede insertarlo en la base de datos directamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a drupal.stackexchange
scroll top