Lorsque j'ai utilisé un filtre exposé, la sélection du filtre est transmise sous forme de paire nom / valeur dans l'url, par exemple:
members?field_a=valuea&field_b=valueb
Comment puis-je le configurer pour utiliser plus d'une URL de style "pathauto":
members/valuea/valueb
Réponses:
Un de mes collègues a créé un module appelé données de chemin . Son intention était de résoudre ce problème même. Malheureusement , il est avéré qu'il est en conflit avec des alias de chemin réguliers, il travaillera sur un site comme drupal.org qui n'utilise pas des alias, mais va rompre les liens sur un chemin alias en utilisant le site.
Actuellement, je pense que la seule façon générique de résoudre ce problème consiste à manipuler les URL au niveau de la couche httpd ou à utiliser hook_url_inbound_alter et hook_url_outbound_alter . Vous pouvez lire un peu plus sur les crochets mentionnés à cette question .
Cependant, si je devais donner à moi-même une autre séance photo, j'essaierais plutôt une solution spécifique à Views, car ce problème est assez courant pour qu'il soit justifié d'avoir un module pour cela.
Dans hook_views_pre_build , on pourrait prendre les données d'une URL comme "members / valuea / valueb", pousser ces valeurs dans $ _GET ['q'], laisser les vues construire sa requête en voyant les arguments get "dans l'url", puis éventuellement les supprimer à nouveau dans hook_views_post_build .
la source
Il y a un module, Query Parameters To URL , que j'ai récemment publié, qui résout le problème que vous décrivez:
Vous pouvez configurer quels chemins doivent voir leurs arguments de requête réécrits en tant que composants d'URL propres à l'aide d'une expression régulière simple ou en implémentant un hook de module.
De cette façon, vous pouvez transformer une URL de filtre exposée Views comme
http://example-site.com/events?field_category_id[0[=100&field_category_id 1 = 101 & field_author_name [0] = John & field_author_surname [0] = Doe
sur http://example-site.com/events/p/field_category_id/0__100--1__101/field_author_name/0__John/field_author_surname/0__Doe
En dessous, il utilise hook_url_inbound_alter, hook_url_outbound_alter et hook_init avec des redirections si nécessaire.
la source
Les filtres exposés sont des formulaires, ce qui signifie que l'endroit où ils redirigent (attribut "action"), doit être connu avant que l'utilisateur ne choisisse une option. Nous ne pouvons donc pas le rediriger vers une jolie URL contenant des informations sur son choix. Les solutions:
JavaScript. Utilisez JavaScript pour modifier à la volée l'attribut "action" du formulaire de filtre exposé en fonction des options choisies par l'utilisateur, et définissez "action" sur l'URL de la vue appropriée avec les filtres contextuels appropriés configurés. Mais je doute que ce soit "SEO friendly" alors (veuillez me corriger si je me trompe).
Faites une double redirection. En utilisant hook_form_alter, après avoir obtenu le formulaire, redirigez l'utilisateur vers l'URL de la bonne vue, avec les filtres contextuels appropriés configurés, en fonction de son entrée. Cela peut en fait nécessiter une confirmation de l'utilisateur sur certains navigateurs, donc cela peut être extrêmement ennuyeux.
Dans les deux méthodes ci-dessus, vous devez utiliser https://drupal.org/project/views_expost pour changer la méthode de ces formulaires en POST, afin que les variables ne polluent pas l'URL des utilisateurs.
L'essentiel est que si vous avez besoin d'avoir de jolies URL avec des filtres exposés - vous faites probablement quelque chose de mal. Parce que je pense qu'ils sont juste pour filtrer les données et ne doivent pas être utilisés pour définir de nouvelles pages sur le site Web. Si vous en avez besoin - vous pouvez créer une vue configurée pour être un menu, et les URL dans ce menu, redirigeraient l'utilisateur vers la même vue qu'il est maintenant, mais avec des filtres contextuels différents.
la source
Du point de vue de la programmation, vous pouvez toujours utiliser les hooks hook_url_inbound_alter () et hook_url_outbound_alter () pour cela.
Vous pouvez essayer les paramètres de requête dans le module URL ou si vous utilisez l' API de recherche et les facettes , vous pouvez utiliser les jolis chemins de l'API de facette .
Vous pouvez également convertir votre vue pour utiliser des arguments dans votre chemin et utiliser le module de redirection .
En dehors de ce qui précède, il n'y a pas de moyen facile d'y parvenir, car il existe encore une fonctionnalité en attente pour Drupal 8; voir Autoriser les chaînes de requête dans les alias d'URL .
Lorsque vous utilisez des panneaux qui utilisent des vues et, par exemple, des filtres mieux exposés, vous pouvez faire quelques hacks comme (exemple d'URL: / panel_url? Category = 123):
Pour plus d'informations, veuillez consulter Passer un argument à partir d'une URL dans le panneau pour afficher le volet ou le bloc .
Enfin, vous pouvez utiliser hook_menu () pour définir vos rappels de menu personnalisés et charger votre vue par programme.
la source
Vous pouvez utiliser le code suivant.
la source