แก้ไขคำถามตามข้อมูลจาก @NoSssweat
โมดูลหนังสือใช้ hook เดียวกันสำหรับบล็อกแผนผังหนังสือและมุมมองดัชนีที่แสดงผลในหน้าหนังสือ
ฉันใช้โค้ดด้านล่างเพื่อส่งคืนคำแนะนำชื่อไฟล์ เพื่อให้ฉันสามารถแทนที่เอาต์พุต html สำหรับบล็อกแผนผังหนังสือในพื้นที่เฉพาะ - "แถบด้านข้างก่อน" ฉันคาดว่ารหัสด้านล่างจะพ่นออกมาเช่น book-tree--book-toc-180--sidebar-first.html.twig
. แต่จะแยกคำแนะนำชื่อไฟล์ที่ได้รับการแนะนำออกไปแทน:
คำแนะนำชื่อไฟล์นี้เหมือนกันกับเนื้อหาหลักในหน้าหนังสือ ฉันจะกำหนดเป้าหมายบล็อกแผนผังหนังสือใด ๆ ภายใน แถบด้านข้างก่อน
ภูมิภาค?
ฟังก์ชัน uswds_subtheme_preprocess_book_tree__book_toc_180(&$ตัวแปร) {
ถ้า (isset($ตัวแปร["องค์ประกอบ"]["#id"])) {
$block_id = $ตัวแปร["องค์ประกอบ"]["#id"];
$block = \Drupal\block\Entity\Block::load($block_id);
ถ้า ($ บล็อก) {
$variables["content"]["#attributes"]["region"] = $block->getRegion();
}
}
}
ฟังก์ชัน uswds_subtheme_theme_suggestions_book_tree__book_toc_180_alter (อาร์เรย์ &$คำแนะนำ, อาร์เรย์ $ตัวแปร) {
ถ้า (isset($variables["attributes"]["region"])) {
$suggestions[] = $variables["theme_hook_original"] "__" . $variables["attributes"]["ภูมิภาค"];
}
}
ความพยายามครั้งที่ 2
ฉันทำด้านล่างและใช้งานได้ แต่ใช้ได้กับบล็อกเริ่มต้นของโมดูลหนังสือเท่านั้น แม้ว่าปลั๊กอินบล็อกโมดูลหนังสืออื่น ๆ ส่วนใหญ่จะใช้ทั้งหมด book-tree.html.twig
ฟังก์ชัน uswds_subtheme_preprocess_block(&$variables) {
ถ้า (isset($ตัวแปร["องค์ประกอบ"]["#id"])) {
$block_id = $ตัวแปร["องค์ประกอบ"]["#id"];
$block = \Drupal\block\Entity\Block::load($block_id);
ถ้า ($ บล็อก) {
$variables["content"]["#attributes"]["region"] = $block->getRegion();
}
}
}
ฟังก์ชัน uswds_subtheme_theme_suggestions_alter (อาร์เรย์ &$คำแนะนำ, อาร์เรย์ $ตัวแปร, $hook) {
ถ้า (isset($variables["attributes"]["region"])) {
$suggestions[] = $variables["theme_hook_original"] "__" . $variables["attributes"]["ภูมิภาค"];
}
}