जवाबों:
प्रीप्रोसेस कार्यों को मॉड्यूल और थीम से लागू किया जा सकता है।
प्रीप्रोसेस फ़ंक्शन जिसकी आपको आवश्यकता है 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']);
यदि आपकी साइट एक से अधिक थीम का उपयोग करती है, या यदि आपकी साइट के लिए सेट की गई थीम वह नहीं है जो आपने बनाई है, तो किसी मॉड्यूल में प्रीप्रोसेस फ़ंक्शन का उपयोग करना बेहतर होता है। इस स्थिति में, आप अपने कस्टम सीएसएस वर्गों को सेट करने में सक्षम होते हैं, और थीम को अपडेट करते समय, या अपनी साइट के लिए उपयोग किए गए डिफ़ॉल्ट विषय को बदलने में उन्हें नहीं खोते हैं। यदि आपकी साइट सिर्फ एक थीम का उपयोग करती है, और वह थीम आपके द्वारा बनाई गई एक कस्टम थीम है, तो आप अपने कस्टम थीम में प्रीप्रोसेस फ़ंक्शन को लागू कर सकते हैं। जब आप थीम को बनाए रखते हैं, तो सीएसएस कक्षाएं आपकी थीम को अपडेट करते समय खो नहीं जाती हैं।
जब भी आप इसे हुक_परप्रोसेस_एचटीएमएल के माध्यम से कर सकते हैं, तो अक्सर आप अपने कोडबेस के पूरी तरह से अलग हिस्से में होंगे जब आपको इसकी आवश्यकता होगी। अगर ऐसा है तो मैं आपको ctools_class_add
इसके बजाय उपयोग करने का सुझाव दूंगा:
ctools_class_add(array('class1', 'class2', 'class3'));
आप कॉल कर सकते हैं कि कहीं से भी हुक_परप्रोसेस_एचटीएमएल अभी तक नहीं चला है और कक्षाएं जोड़ी जाएंगी।
मान लें कि आप मेनू सामग्री के आधार पर अपने सामग्री पृष्ठों के लिए स्वचालित रूप से शब्दार्थ पथ बनाने के लिए 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);
}
}
आप इसके माध्यम से कर सकते हैं 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()
।