สิ่งที่คุณได้รับใน $ตะขอ
ไม่ได้บอกว่าเมนูใดที่เรียกใช้ฟังก์ชันการประมวลผลล่วงหน้า เป็นคำแนะนำง่ายๆ ที่ Drupal กำลังดำเนินการอยู่ ThemeManager::render()
.
// เรียกใช้ hook_theme_suggestions_HOOK()
$suggestions = $this->moduleHandler->invokeAll('theme_suggestions_' . $base_theme_hook, [
$ตัวแปร
]);
// หากมีการเรียกใช้ธีมพร้อมกับคำแนะนำธีมโดยตรง
// เช่น '#theme' => 'node__article' ให้เพิ่มไปยังอาร์เรย์คำแนะนำก่อนหน้า
// เรียกใช้คำแนะนำแก้ไข hooks
ถ้า (isset($info['base hook'])) {
$suggestions[] = $เบ็ด;
}
// เรียกใช้ hook_theme_suggestions_alter() และ
// hook_theme_suggestions_HOOK_alter()
$ตะขอ = [
'theme_suggestions',
'theme_suggestions_' . $base_theme_hook,
];
$this->moduleHandler->alter($hooks, $suggestions, $variables, $base_theme_hook);
$this->alter($hooks, $suggestions, $variables, $base_theme_hook);
// ตรวจสอบว่ามีคำแนะนำแต่ละข้ออยู่ในรีจิสทรีของธีมหรือไม่ และถ้ามี
// ใช้แทน hook ฐาน ตัวอย่างเช่น ฟังก์ชันอาจใช้
// '#theme' => 'node' แต่โมดูลสามารถเพิ่ม 'node__article' เป็นคำแนะนำได้
// ผ่าน hook_theme_suggestions_HOOK_alter() ทำให้มีธีม
// ไฟล์เทมเพลตสำรองสำหรับโหนดบทความ
foreach (array_reverse($suggestions) เป็น $suggestion) {
ถ้า ($theme_registry->has($suggestion)) {
$info = $theme_registry->get($suggestion);
หยุดพัก;
}
}
Olivero_theme_suggestions_menu_alter()
เป็นหนึ่งในตะขอที่เปลี่ยนคำแนะนำสำหรับไฟล์เทมเพลตเมนู อาจมีโมดูลที่ทำตามคำแนะนำที่คล้ายกัน ในกรณีของคุณ
ฟังก์ชัน Olivero_theme_suggestions_menu_alter (&$ คำแนะนำ, อาร์เรย์ $ ตัวแปร) {
ถ้า (isset($variables['attributes']['region'])) {
$suggestions[] = 'เมนู__' $variables['attributes']['region'];
}
}
สิ่งที่คุณกำลังมองหาคือชื่อเครื่องเมนูที่เก็บไว้ใน $ตัวแปร['menu_name']
ตามเอกสารใน menu.html.twig.
หากจุดประสงค์คือการซ่อนรายการเมนู การใช้เบ็ดการประมวลผลล่วงหน้านั้นไม่ใช่วิธีแก้ปัญหา การซ่อนรายการเมนูก็เพียงพอแล้ว ตัวอย่างเช่น เพื่อหลีกเลี่ยงไม่ให้ผู้ใช้ที่เข้าสู่ระบบในปัจจุบันเข้าถึงเส้นทางที่ใช้สำหรับรายการเมนูนั้น ในกรณีนั้น Drupal จะไม่แสดงรายการเมนู