วิธีเพิ่มคลาสในแท็ก BODY ขึ้นอยู่กับเส้นทาง / ความลึกของหน้าเว็บแบบไดนามิก?


22

วิธีเพิ่มคลาสให้กับแท็ก body แบบไดนามิกเช่นตัวอย่างด้านล่าง?

-Home
-Cities      
--Melbourne       <body class="melbourne">
--- สวนสนุก       <body class="melbourne theme_parks">
--- ร้านอาหาร       <body class="melbourne restaurants">
--New นิวยอร์ก       <body class="new_york">
--- สวนสนุก       <body class="new_york theme_parks">
--- ร้านอาหาร       <body class="new_york restaurants">
-Contact เรา       <body class="contact_us">

มือใหม่ Drupal ที่นี่และไม่มีพื้นฐานการเขียนโปรแกรม ดังนั้นฉันจะขอบคุณมากหากคุณสามารถให้รายละเอียดมากที่สุดเท่าที่เป็นไปได้เมื่อแบ่งปันโซลูชัน

คำตอบ:


37

หากต้องการอธิบายคำตอบของ Nikhil Mohan คุณสามารถนำไปใช้template_preprocess_html()ในไฟล์ template.php ของธีมของคุณ อ่านเอกสารเกี่ยวกับการเอาชนะ Themable Outputเพื่อทำความเข้าใจพื้นฐานของสิ่งที่เกิดขึ้นที่นี่

ภายในฟังก์ชั่นนี้คุณสามารถเข้าถึงตัวแปร$vars['classes_array']ซึ่งมีรายการคลาสที่จะใช้กับ<body>แท็กHTML บนหน้า

น่าเสียดายที่ข้อมูลเกี่ยวกับตำแหน่งของหน้าปัจจุบันในเมนูไม่สามารถใช้งานได้ทันที คุณสามารถใช้menu_get_item()แล้วmenu_get_ancestors()รับข้อมูลนี้ได้ แต่นั่นเป็นพลังการประมวลผลจำนวนมากสำหรับบางสิ่งที่เราอาจจะได้ด้วยวิธีการของซิมป์ไพเลอร์

สมมติว่าคุณกำลังใช้โมดูล pathauto เพื่อสร้างเส้นทาง semantic สำหรับหน้าเนื้อหาของคุณโดยอัตโนมัติตามเส้นทางเมนู (เช่นหน้า Melbourne Theme Parks ของคุณจะมีเส้นทาง 'melbourne / theme_parks') คุณสามารถใช้เส้นทางของหน้าเพื่อสร้างคลาสที่คุณ กำลังมองหา:

function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}

แค่นั้นแหละ. ตอนนี้ Drupal จะดูที่นามแฝงของเส้นทางของหน้าปัจจุบันและเพิ่มคลาสให้กับ<body>แท็กสำหรับแต่ละส่วนของนามแฝงของเส้นทาง


1
หากพา ธ ไม่ทำงานการแยกวิเคราะห์menu_get_active_breadcrumbเป็นตัวเลือกเช่นกัน ดูเหมือนว่าในstaticแคช ณ จุดนั้นแทบจะไม่มีค่าใช้จ่ายเลย
mpdonadio

3
ขอบคุณทุกคนโดยเฉพาะ @sheena_d สำหรับคำอธิบายและรหัส! ต้องค้นหานิดหน่อยว่าจะทำให้ Omega Theme ทำงานอย่างไรและจัดการเพื่อให้มันทำงานได้: D นี่คือบรรทัดที่จะทำให้มันทำงานใน Omega Theme: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala

1

คุณสามารถใช้ประโยชน์template_preprocess_htmlซึ่งตัวแปร Preprocess สำหรับ html.tpl.php

ดูเพิ่มเติมที่html.tpl.php

การใช้ชุดรูปแบบเริ่มต้นเพื่อแสดงโครงสร้าง html พื้นฐานของหน้า Drupal หน้าเดียว



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.