Cuando utilicé un filtro expuesto, la selección de filtro se pasa como un par de nombre / valor en la url, por ejemplo:
members?field_a=valuea&field_b=valueb
¿Cómo puedo configurarlo para usar más de una URL de estilo "pathauto":
members/valuea/valueb
Respuestas:
Un colega mío creó un módulo llamado datos de ruta hace un tiempo. Su intención era resolver este mismo problema. Por desgracia, ha resultado que entra en conflicto con los alias de ruta normal, por lo que funciona en un sitio como drupal.org que no utiliza los alias, pero será romper enlaces en un camino-alias utilizando el sitio.
Actualmente, creo que la única forma genérica de resolver este problema es manipulando las URL en la capa httpd o utilizando hook_url_inbound_alter y hook_url_outbound_alter . Puede leer un poco más sobre los ganchos mencionados en esta pregunta .
Sin embargo, si tuviera que darle otra oportunidad a mí mismo, intentaría una solución específica de Vistas, ya que este problema es lo suficientemente común como para justificar tener un módulo para esto.
En hook_views_pre_build , uno podría tomar datos de una url como "members / valuea / valueb", insertar estos valores en $ _GET ['q'], permitir que las vistas construyan su consulta viendo los argumentos de obtención "en la url", y luego posiblemente eliminarlos de nuevo en hook_views_post_build .
fuente
Hay un módulo, Parámetros de consulta a URL , que lancé recientemente que aborda el problema que está describiendo:
Puede configurar qué rutas deben reescribir sus argumentos de consulta como componentes URL limpios utilizando una expresión regular simple o implementando un enlace de módulo.
De esa manera puede transformar una URL de filtro expuesta Vistas como
http://example-site.com/events?field_category_id[0font>=100&field_category_id 1 = 101 & field_author_name [0] = John & field_author_surname [0] = Doe
en http://example-site.com/events/p/field_category_id/0__100--1__101/field_author_name/0__John/field_author_surname/0__Doe
Debajo usa hook_url_inbound_alter, hook_url_outbound_alter y hook_init con redireccionamientos cuando sea necesario.
fuente
Los filtros expuestos son formularios, lo que significa que el lugar donde se redirige (atributo "acción") debe conocerse antes de que el usuario elija cualquier opción. Por lo tanto, no podemos redirigirlo a ninguna URL bonita que contenga información sobre su elección. Las soluciones alternativas:
JavaScript Use JavaScript para alterar sobre la marcha el atributo "acción" del formulario de filtro expuesto según las opciones que elija el usuario, y establezca "acción" en la URL de la vista adecuada con los filtros contextuales adecuados configurados. Pero dudo que sea "SEO amigable" (por favor, alguien me corrija si me equivoco).
Haz doble redireccionamiento. Al usar hook_form_alter, después de obtener el formulario, redirija al usuario a la URL de la vista adecuada, con los filtros contextuales configurados, en función de su entrada. Esto puede necesitar una confirmación del usuario en algunos navegadores, por lo que puede ser extremadamente molesto.
En los dos métodos anteriores, deberá usar https://drupal.org/project/views_expost para cambiar el método de esos formularios a POST, de modo que las variables no contaminen la URL de los usuarios.
La conclusión es que si necesita tener URL bonitas con filtros expuestos, probablemente esté haciendo algo mal. Porque creo que son solo para filtrar datos y no deberían usarse para definir nuevas páginas en el sitio web. Si lo necesita, puede crear una vista configurada para ser un menú, y las URL en ese menú redirigen al usuario a la misma vista que es ahora, pero con diferentes filtros contextuales.
fuente
Desde el punto de vista programático, siempre puedes usar hook_url_inbound_alter () y hook_url_outbound_alter () para eso.
Puede intentar consultar el módulo Parámetros de consulta a URL o si está utilizando Search API y Facets , puede usar Facet API Pretty Paths .
También puede convertir su vista para usar argumentos en su ruta y usar el módulo Redirigir .
Aparte de lo anterior, no hay una manera fácil de lograrlo, ya que todavía hay una característica pendiente para Drupal 8; consulte Permitir cadenas de consulta en alias de URL .
Cuando usa paneles que usan vistas y, por ejemplo, mejores filtros expuestos, puede hacer algunos trucos como (ejemplo de URL: / panel_url? Category = 123):
Para obtener más información, consulte Pasar argumento desde la URL en el Panel para ver el Panel o Bloquear .
Finalmente, puede usar hook_menu () para definir sus devoluciones de llamada de menú personalizadas y cargar su vista mediante programación.
fuente
Puedes usar el siguiente código.
fuente