În Drupal 9, am o vizualizare numită Știri.
Vizualizarea este afișată pe următoarea cale:
/știri
Îl pot edita pe următoarea cale:
/admin/structure/views/view/news/edit
Are următorul filtru contextual:
Sursă de date de conținut: tip de conținut
Valorile filtrului contextual sunt furnizate de adresa URL.
Când valoarea filtrului este NU în URL: Furnizați valoarea implicită
Tip: Fix
Valoare fixa: toate
Valoare de excepție: toate
Dacă această valoare este primită, filtrul va fi ignorat; adică „toate valorile”
Acest lucru funcționează bine pentru tipuri de conținut precum articol
și postare pe blog
.
Când View este afișat pentru cale /articol de stiri
, filtrul contextual arată numai Tipul de conținut articol
.
Când View este afișat pentru cale /news/blog_post
, filtrul contextual arată numai Tipul de conținut postare pe blog
.
Până acum, bine.
Acum, clientul are un tip de conținut personalizat numit „Video YouTube” cu numele mașinii youtube_video
.
Când această vizualizare este afișată pentru cale /news/youtube_video
. filtrul contextual arată numai tipul de conținut youtube_video
.
Dar clientul vrea ca calea să fie /știri/video
.
Care sunt opțiunile mele?
Câteva constrângeri:
- Clientul categoric vrea să fie calea
/știri/video
, și nu ceva de genul /news?type=video
.
- Nu cred că este banal să se potrivească
/știri/foo
și înlocuitor bar
pentru foo
ca intrare pentru un filtru contextual.
- Știu cum să folosesc parametrii de poziție într-o rută, dar nu cred că pot trece cu ușurință pe traseu doar pentru
/știri/foo
păstrând în același timp filtrul contextual așa cum este pentru celelalte tipuri de conținut.
O oarecare flexibilitate:
- Site-ul Drupal 9 este nou-nouț și sunt pe cale să migrez conținutul din Drupal 7 prin Migrate API, deci este posibil pentru a schimba numele mașinii
youtube_video
tip de conținut la video
în timpul migrației. Atunci această vizualizare ar funcționa fără modificări. (Problema ar fi să descoperi orice altceva care face referire la numele mașinii youtube_video
și schimbându-l în video
de asemenea -- potențial mult efort.)
- Poate fi posibilă modificarea condiționată a parametrilor de interogare folosind
hook_views_pre_view()
sau hook_views_query_alter()
, dar vreau să fac asta numai dacă se potrivește un anumit parametru.