Î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.