पृष्ठ पथ / गहराई के आधार पर गतिशील रूप से BODY टैग में कक्षाएं कैसे जोड़ें?


22

नीचे दिए गए उदाहरण के रूप में गतिशील रूप से बॉडी टैग में कक्षाएं कैसे जोड़ें?

गृह
-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

निखिल मोहन के उत्तर को उजागर करने के लिए, आप template_preprocess_html()अपने विषय के खाके के अंदर लागू कर सकते हैं । यहां क्या चल रहा है, इसकी मूल बातें समझने के लिए थ्योरेबल आउटपुट को ओवरराइड करने पर प्रलेखन पढ़ें ।

इस फ़ंक्शन के भीतर, आपके पास वैरिएबल तक पहुंच है $vars['classes_array'], जो उन कक्षाओं की एक सूची रखता है जो <body>पृष्ठ पर HTML टैग पर लागू होंगे ।

दुर्भाग्य से, मेनू में वर्तमान पृष्ठ के स्थान के बारे में जानकारी तुरंत उपलब्ध नहीं है। आप इस्तेमाल कर सकते हैं menu_get_item()और फिर menu_get_ancestors()यह जानकारी प्राप्त करने, लेकिन यह कुछ है कि हम शायद एक simpiler दृष्टिकोण के साथ करने के लिए प्राप्त कर सकते हैं के लिए संसाधन क्षमता का एक बहुत कुछ है।

मान लें कि आप मेनू पथ के आधार पर अपने सामग्री पृष्ठों के लिए स्वचालित रूप से शब्दार्थ पथ बनाने के लिए pathauto मॉड्यूल का उपयोग कर रहे हैं (यानी, आपके मेलबोर्न थीम पार्क पृष्ठ का पथ 'मेलबोर्न / 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);
  } 
}

बस। द्रुपाल अब वर्तमान पृष्ठ के पथ उपनाम को देखेगा और पथ उपनाम के <body>प्रत्येक भाग के लिए टैग में एक वर्ग जोड़ देगा ।


1
यदि पथ काम नहीं करते हैं, तो मेनू_सेट_ऐक्टिव_ब्रेडक्रंब को पार्स करना भी एक विकल्प है। यह staticउस बिंदु पर कैश में होने की संभावना है , इसलिए लगभग कोई ओवरहेड नहीं है।
mpdonadio

3
आप सभी को, विशेष रूप से @sheena_d को स्पष्टीकरण के साथ-साथ कोड के लिए धन्यवाद! ओमेगा थीम पर काम करने के तरीके के बारे में थोड़ी खोज करनी थी और इसे काम में लाने में कामयाब रहे: D यह ओमेगा थीम पर काम करने की लाइन है: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala

1

आप का उपयोग कर सकते हैं template_preprocess_html, जो html.tpl.php के लिए प्रीप्रोसेस चर

Html.tpl.php भी देखें

एकल Drupal पृष्ठ के मूल HTML संरचना को प्रदर्शित करने के लिए डिफ़ॉल्ट थीम कार्यान्वयन



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.