ฉันมีประเภทเนื้อหาผลิตภัณฑ์ที่มีนามแฝง: /products/headphone หน้าผลิตภัณฑ์นี้มี URL สองรูปแบบ:
- /ผลิตภัณฑ์/หูฟัง/สาย
- /ผลิตภัณฑ์/หูฟัง/ไร้สาย
URL ทั้งสองควรชี้ไปที่โหนดเดียวกัน อย่างไรก็ตาม ภายในฟังก์ชันการประมวลผลล่วงหน้าหรือกิ่งก้าน ฉันควรจะสามารถจับได้ว่ารูปแบบใดถูกโหลด (wire|wireless)
ฉันคิดว่าฉันควรสร้างโมดูลที่กำหนดเองและจัดการการกำหนดเส้นทางที่กำหนดเอง:
my_module.routing.yml:
my_module.modality:
เส้นทาง: '/products/{product_slug}/{variation}'
ค่าเริ่มต้น:
_controller: '\Drupal\my_module\Controller\ProductController::action'
ความต้องการ:
_permission: 'เข้าถึงเนื้อหา'
ตัวเลือก:
พารามิเตอร์:
product_slug:
ประเภท: สตริง
รูปแบบ:
ประเภท: สตริง
ส่วนที่ฉันกำลังดิ้นรนคือวิธีชี้ตัวควบคุมกลับไปที่ฟังก์ชันการประมวลผลล่วงหน้า:
ฟังก์ชัน my_module_preprocess_node__product_page (อาร์เรย์ &$ตัวแปร){
// บางสิ่งในการประมวลผลล่วงหน้า
}
นี่คือสิ่งที่ฉันมีอยู่ในคอนโทรลเลอร์ของฉัน:
\Drupal\my_module\Controller\ProductController:action
การกระทำของฟังก์ชั่นสาธารณะ ($ program_slug, $ รูปแบบ)
{
กลับ [
'เทมเพลต' => 'โหนด--program_page',
'รูปแบบ' => $รูปแบบ
];
}