मैं प्रोग्रामेटिक रूप से HTML "बॉडी" टैग में क्लास कैसे जोड़ूँ?


13

मैं एक कस्टम जोड़ना चाहते हैं CSS वर्ग के लिए <body>टैग। मैं Drupal 7 / Corolla का उपयोग कर रहा हूं।

मैं इसे अपने कस्टम मॉड्यूल से प्रोग्रामेटिक रूप से कैसे कर सकता हूं?

जवाबों:


13

प्रीप्रोसेस कार्यों को मॉड्यूल और थीम से लागू किया जा सकता है।

प्रीप्रोसेस फ़ंक्शन जिसकी आपको आवश्यकता है hook_preprocess_html()और सेट करने के लिए चर है $variables['classes_array'], जो एक सरणी है जिसमें <body>तत्व के लिए सभी वर्ग सेट हैं । HTML.tpl.php फ़ाइल की सामग्री जो डिफ़ॉल्ट रूप से Drupal द्वारा उपयोग की जाती है (यदि विषय अलग टेम्पलेट फ़ाइल का उपयोग नहीं करता है) निम्नलिखित है:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>

<head profile="<?php print $grddl_profile; ?>">
  <?php print $head; ?>
  <title><?php print $head_title; ?></title>
  <?php print $styles; ?>
  <?php print $scripts; ?>
</head>
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
  <div id="skip-link">
    <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
  </div>
  <?php print $page_top; ?>
  <?php print $page; ?>
  <?php print $page_bottom; ?>
</body>
</html>

अपने मॉड्यूल में आप बस इस प्रकार प्रीप्रोसेस फंक्शन को लागू करते हैं:

function mymodule_preprocess_html(&$variables) {
  $variables['classes_array'][] = "new-class";
}

template_process () तो निम्न कोड के साथ $variables['classes_array']आबाद करने के लिए उपयोग करता है $variables['classes']:

$variables['classes'] = implode(' ', $variables['classes_array']);

 

यदि आपकी साइट एक से अधिक थीम का उपयोग करती है, या यदि आपकी साइट के लिए सेट की गई थीम वह नहीं है जो आपने बनाई है, तो किसी मॉड्यूल में प्रीप्रोसेस फ़ंक्शन का उपयोग करना बेहतर होता है। इस स्थिति में, आप अपने कस्टम सीएसएस वर्गों को सेट करने में सक्षम होते हैं, और थीम को अपडेट करते समय, या अपनी साइट के लिए उपयोग किए गए डिफ़ॉल्ट विषय को बदलने में उन्हें नहीं खोते हैं। यदि आपकी साइट सिर्फ एक थीम का उपयोग करती है, और वह थीम आपके द्वारा बनाई गई एक कस्टम थीम है, तो आप अपने कस्टम थीम में प्रीप्रोसेस फ़ंक्शन को लागू कर सकते हैं। जब आप थीम को बनाए रखते हैं, तो सीएसएस कक्षाएं आपकी थीम को अपडेट करते समय खो नहीं जाती हैं।


हां, मैं आमतौर पर प्रत्येक मॉड्यूल में preprocess_html के माध्यम से मॉड्यूल के नाम से निपटता हूं, इसलिए विषय जेएस वांछित होने पर पता लगा सकता है।
mpdonadio

9

MODULENAME.module और स्पष्ट कैश में जोड़ें

function MODULENAME_preprocess_html(&$vars) {
  $vars['classes_array'][] = 'custom-class';
}

4

जब भी आप इसे हुक_परप्रोसेस_एचटीएमएल के माध्यम से कर सकते हैं, तो अक्सर आप अपने कोडबेस के पूरी तरह से अलग हिस्से में होंगे जब आपको इसकी आवश्यकता होगी। अगर ऐसा है तो मैं आपको ctools_class_addइसके बजाय उपयोग करने का सुझाव दूंगा:

ctools_class_add(array('class1', 'class2', 'class3'));

आप कॉल कर सकते हैं कि कहीं से भी हुक_परप्रोसेस_एचटीएमएल अभी तक नहीं चला है और कक्षाएं जोड़ी जाएंगी।


1

मान लें कि आप मेनू सामग्री के आधार पर अपने सामग्री पृष्ठों के लिए स्वचालित रूप से शब्दार्थ पथ बनाने के लिए pathauto मॉड्यूल का उपयोग कर रहे हैं, तो आप उन कक्षाओं को बनाने के लिए पृष्ठ के पथ का उपयोग कर सकते हैं जिन्हें आप देख रहे हैं:

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);
  } 
}

1

आप इसके माध्यम से कर सकते हैं template_preprocess_html()। आप इसे अपने में डाल सकते हैं template.php, जहाँ भी आपका विषय / आधार विषय सबसे उपयुक्त लगता है (जैसे, ओमेगा प्रीप्रोसेस फ़ोल्डर), या एक कस्टम मॉड्यूल में, जो सबसे उपयुक्त है, उसके आधार पर।

function mytheme_preprocess_html(&$variables) {
  $variables['classes_array'][] = "class1";
  $variables['classes_array'][] = "class2";
  $variables['classes_array'][] = "class3";
}

एपीआई संदर्भ में नाम के बावजूद, theme_preprocessऔर theme_processफ़ंक्शन को मॉड्यूल से बुलाया जा सकता है, न कि केवल थीम। आपको बस अपने मॉड्यूल से मिलान करने के लिए हुक का नाम देना होगा, जैसे mymodule_preprocess_html()

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