ใน Drupal 9 ฉันมี View ที่เรียกว่า ข่าว.
มุมมองจะแสดงที่เส้นทางต่อไปนี้:
/ข่าว
ฉันสามารถแก้ไขได้ตามเส้นทางต่อไปนี้:
/admin/structure/views/view/news/edit
มีตัวกรองบริบทต่อไปนี้:
แหล่งข้อมูลเนื้อหา: ประเภทเนื้อหา
ค่าตัวกรองตามบริบทมีให้โดย URL
เมื่อค่าตัวกรองเป็น ไม่ ใน URL: ให้ค่าเริ่มต้น
พิมพ์: แก้ไขแล้ว
ค่าคงที่: ทั้งหมด
ค่าข้อยกเว้น: ทั้งหมด
หากได้รับค่านี้ ตัวกรองจะถูกละเว้น นั่นคือ "ค่าทั้งหมด"
วิธีนี้ใช้ได้ดีกับเนื้อหาประเภทต่างๆ เช่น บทความ
และ โพสต์บล็อก
.
เมื่อมุมมองปรากฏขึ้นสำหรับเส้นทาง /หัวข้อข่าว
ตัวกรองตามบริบทจะแสดงเฉพาะประเภทเนื้อหาเท่านั้น บทความ
.
เมื่อมุมมองปรากฏขึ้นสำหรับเส้นทาง /news/blog_post
ตัวกรองตามบริบทจะแสดงเฉพาะประเภทเนื้อหาเท่านั้น โพสต์บล็อก
.
จนถึงตอนนี้ดีมาก
ตอนนี้ไคลเอ็นต์มีประเภทเนื้อหาที่กำหนดเองซึ่งเรียกว่า "วิดีโอ Youtube" พร้อมชื่อเครื่อง youtube_video
.
เมื่อมุมมองนี้แสดงขึ้นสำหรับเส้นทาง /news/youtube_video
. ตัวกรองบริบทแสดงเฉพาะประเภทเนื้อหา youtube_video
.
แต่ลูกค้าต้องการให้เส้นทางเป็น /ข่าว/วิดีโอ
.
ตัวเลือกของฉันคืออะไร?
ข้อ จำกัด บางประการ:
- ลูกค้า อย่างแน่นอน ต้องการให้เส้นทางเป็น
/ข่าว/วิดีโอ
และไม่ใช่สิ่งที่ชอบ /news?type=วิดีโอ
.
- ฉันไม่คิดว่ามันไม่สำคัญที่จะจับคู่
/ข่าว/ฟู
และทดแทน บาร์
สำหรับ ฟู
เป็นอินพุตสำหรับตัวกรองตามบริบท
- ฉันรู้วิธีใช้พารามิเตอร์ตำแหน่งในเส้นทาง แต่ฉันไม่คิดว่าฉันจะสามารถแทนที่เส้นทางได้ง่ายๆ เพียงแค่
/ข่าว/ฟู
ในขณะที่คงตัวกรองตามบริบทไว้เช่นเดียวกับเนื้อหาประเภทอื่นๆ
ความยืดหยุ่นบางอย่าง:
- ไซต์ Drupal 9 เป็นเว็บไซต์ใหม่ และฉันกำลังจะย้ายเนื้อหาจาก Drupal 7 ผ่าน Migrate API ดังนั้น เป็นไปได้ เพื่อเปลี่ยนชื่อเครื่องของ
youtube_video
ประเภทเนื้อหาเป็น วิดีโอ
ระหว่างการโยกย้าย จากนั้นมุมมองนี้จะทำงานโดยไม่มีการแก้ไข (ปัญหาคือการหาทุกอย่างอื่นที่อ้างอิงถึงชื่อเครื่อง youtube_video
และเปลี่ยนเป็น วิดีโอ
เช่นกัน - อาจต้องใช้ความพยายามอย่างมาก)
- อาจเป็นไปได้ที่จะเปลี่ยนพารามิเตอร์การค้นหาแบบมีเงื่อนไขโดยใช้
hook_views_pre_view()
หรือ hook_views_query_alter()
แต่ฉันต้องการทำเช่นนี้หากพารามิเตอร์เฉพาะตรงกันเท่านั้น