URL Rewriting avec Views et Arguments

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,
J'ai un petit soucis que je n'arrive pas à résoudre avec Views sous drupal 7

J'ai un type de contenu "Etablissement"
J'ai 2 vocabulaires :
- "Rubrique" qui correspond à Hotels, Restaurants etc.....
- "Villes" qui correspond à Paris, Marseille etc....

J'ai lié mon Type de contenu à ces 2 vocabulaires lors de la saisie d'un contenu de type "Etablissement". Tout est OK.

Une fois les contenu enregistré, je crée une vue avec Views. Je désire juste que les restaurants de Paris soient affichés.
Je paramètre donc :
- Critères de filtrage
Contenu : Publié (Oui)
Contenu : Type (= Etablissement)
- Paramètres de la page
Chemin: /%-%.html
- Relations
Contenu : Taxonomy terms on node () avec choix des vocabulaires "Rubrique" et "Villes" et j'"exige" cette Relation.
- Filtres contextuels
(terme) Terme de taxonomie : Identifiant (ID) du terme

Cela marche très bien dans l'update Preview. avec les paramètres 104-106.html qui correspond aux paramètres id de taxonomie "104" pour la rubrique "Restaurant" et l'id de taxonomie "106" pour la "Ville" Paris
En revanche, en tapant l'url comme ceci la page est non trouvée :-( : http://localhost/monsite/104-106.html

De plus, ce que je souhaite, c'est d'avoir à taper non pas http://localhost/monsite/104-106.html, ni http://localhost/monsite/Restaurant-Paris.html mais que l'url soit rewritée de cette manière : http://localhost/monsite/restaurant-paris.html comme le font les modules Pathauto et Tansliteration

Avez-vous des pistes svp ?

Merci !!!!

Bonjour,

De ce que j'ai compris, l'argument (ou les arguments) passe par l'URL. Il me semble donc contradictoire de demander un filtrage dynamique sur des tid (104-106) ET leur traduction en termes intelligibles dans l'adresse (restaurant-paris).

Soit vous envoyez à views 104-106, soit vous lui envoyez restaurant-paris et lui construit sa vue en fonction de cet argument.

Merci pour votre réponse.
Ce que je trouve bizarre, c'est que le preview marche bien en mettant mes paramètres 104 et 106 mais quand je souhaite afficher la page, il me met "Page non trouvée" ;-(
Je ne comprend pas pourquoi ?

Pourtant, j'ai refait ma vue avec qu'un seul argument (enfin "filtre contextuel" dans ma version 7.3 de Views) et tout semble OK : Voici la requête SQL générée :

SELECT node.created AS node_created, node.nid AS nid
FROM
{node} node
INNER JOIN {taxonomy_index} taxonomy_index ON node.nid = taxonomy_index.nid
WHERE (( (node.status = '1') AND (node.type IN  ('etablissement')) AND (taxonomy_index.tid = '105') ))
ORDER BY node_created DESC
LIMIT 10 OFFSET 0

L'aperçu est bon mais j'ai toujours "Page non trouvée" quand je mets mon chemin défini.
J'ai supprimé tous les alias d'url de pathauto et toujours le même problème de Page non trouvée :-( Bizarre bizarre... :-(

En fait, mon problème de "Page non trouvée" venait du fait de mon url. En effet, je mettais directement ma vue à la racine et mon url etait donc : -http://localhost/monsite/104-106.html
J'ai modifié mon chemin en /liste/%/% et à présent l'adresse -http://localhost/monsite/liste/105/106 marche parfaitement bien avec comme arguments :
- Contenu : Nom Rubrique
- Contenu : Nom Ville
Ces derniers sont des term reference de taxonomie lié à mon type de contenu Etablissement.

Donc à présent ca marche, il ne me reste plus qu'à transformer cette url en -http://localhost/monsite/liste/restaurant-paris.html ou mieux encore -http://localhost/monsite/restaurant-paris.html et là.... c'est pas gagné :-(

C'est bon, j'ai trouvé !!
En fait, c'est Views3 qui pose problème. Si cela doit arriver à quelqu'un d'autre, voici les étapes :
Pour des arguments autre que l'id, voici les étapes :
Choisir dans "Contextual filters" --> "Content: Has taxonomy term ID"
Choisir dans les options "Display all results for the specified field"
Cocher : "Specify validation criteria"
Validator: "Taxonomy Term"
Selectionner le vocabulaire désiré
Enfin choisir le "Filter value type" : Term Name converted to Term ID

J'espère que c'est la bonne méthode mais cela marche pour moi à présent en tapant l'url :
http://localhost/monsite/liste/hotel/bordeaux

Je rebondis sur mon post résolu pour un affichage de vue de type Page.

En effet, je souhaite à présent, et pour clore définitivement ce post, récupérer les arguments à travers un affichage de vue de type "Bloc". J'ai beau cherche sur internet, je ne trouve pas bonheur :-(
Ce bloc doit s'afficher dans http://localhost/monsite/liste/hotel/paris, même page que précédemment.

Voici ce que j'ai effectué à travers l'interface d'admin views3 de Drupal7 :

   Add Block
   Display name: BlockCoupsdeCoeurCateg
   Format: Grid
   Fields
     Content: Title
   Filter criteria
     Content: Published (Yes)
     Content: Type (= Etablissement)
   Sort criteria
     Content: Post date (desc)
     Global: Random (asc)
   Block settings
     Block name: Bloc Coups de Coeur Categ
   Pager
     Use pager: Display a specified number of items | 4 items

   Contextual filters
   Add the filter: "Content: Has taxonomy term ID"
      This Block (override)
      Provide default value
      Type: Taxonomy Term ID from URL
      Je coche "Load default filter from node page, that’s good for related taxonomy blocks."
      Je choisis mon vocabulaire désiré : "Rubrique"
      Je coche : «Specify validation criteria»
      Validator : «Taxonomy Term»
      Je sélectionne le vocabulaire désiré : "Rubrique"
      Enfin je choisi le «Filter value type» : Term Name converted to Term ID

   Je crée un deuxième même filtre contextuel pour le vocabulaire "Ville"

   Machine Name: block_coupcoeurcateg

J'intègre ensuite ce bloc dans une région de mon template de page.

Dans mon "Preview with contextual filters" je mets hotel/paris, ca marche super !! En revanche quand j'affiche ma page http://localhost/monsite/liste/hotel/paris, le bloc ne s'affiche pas :-(
J'ai dû loupé une étape mais là je suis bloqué :-(

Merci pour votre aide....

Bonjour à tous !

Je rebondis sur ce vieux post car y'a un truc qui me turlupine ;-)

en fait,j'ai fini par faire une vue qui fonctionne mais qui a comme chemin : /guide/%/rubrique/%
Le 1er % est le nom d'une ville et le 2eme le nom de la rubrique.

Or, je souhaiterais une url avec l'extension .html

J'ai donc mis, dans le paramètres views de la page, le chemin : /guide/%/rubrique/%.html

Cependant, pour mes tests, cela ne fonctionne pas pour l'url http://www.monsite.local/guide/bordeaux/rubrique/mode.html
En revanche pour l'url suivante, url un peu bizarre, cela fonctionne dans l'update preview : http://www.monsite.local/guide/bordeaux/rubrique/%.html/mode

Savez-vous comment je pourrais faire pour avoir une url qui ressemble à http://www.monsite.local/guide/bordeaux/rubrique/mode.html et qui fonctionne ? Pathauto ?

Merci !!

Pathauto ne semble malheureusement pas fonctionner avec les chemins des views. J'étais confronté au même problème, et je n'ai trouvé qu'une seule solution qui serait dans ton cas:

/guide/%/rubrique/%

Ensuite il faut utiliser les templates pour ajouter .html aux liens qui seront cliqués (sommaire d'articles par exemple), et dans la view qui a le chemin écrit au dessus il faut utiliser php pour supprimer .html de l'argument reçu. (Contextual filter, cocher specify validation criteria, validator php code avec par exemple le code:

$handler->argument = preg_replace('/.html$/i', '', $handler->argument);
return true;

Si quelqu'un à une autre solution je suis interessé.