أود إضافة فئة CSS مخصصة إلى <body>
بطاقة شعار. أنا أستخدم Drupal 7/Corolla.
كيف يمكنني القيام بذلك برمجيًا من الوحدة النمطية المخصصة الخاصة بي؟
يمكن تنفيذ وظائف ما قبل المعالجة من الوحدات والموضوعات.
دالة ما قبل المعالجة التي تحتاجها هي 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']);
يفضل استخدام وظيفة ما قبل المعالجة في وحدة نمطية إذا كان موقعك يستخدم أكثر من موضوع واحد ، أو إذا كانت مجموعة السمات الخاصة بموقعك ليست هي السمة التي أنشأتها. في هذه الحالة ، يمكنك تعيين فئات CSS المخصصة الخاصة بك ، ولا تفقدها عند تحديث السمة ، أو ببساطة تغيير السمة الافتراضية التي يستخدمها موقعك. إذا كان موقعك يستخدم موضوعًا فقط ، وكان هذا المظهر عبارة عن سمة مخصصة أنشأتها ، فيمكنك تنفيذ وظيفة المعالجة المسبقة في نسقك المخصص. أثناء الحفاظ على السمة ، لا تفقد فئات CSS عند تحديث السمة.
إضافة إلى MODULENAME.module ومسح ذاكرة التخزين المؤقت
function MODULENAME_preprocess_html(&$vars) {
$vars['classes_array'][] = 'custom-class';
}
بينما يمكنك القيام بذلك من خلال hook_preprocess_html ، غالبًا ما تكون في جزء مختلف تمامًا من قاعدة التعليمات البرمجية عندما تحتاج إلى ذلك. إذا كانت هذه هي الحالة ، أقترح عليك استخدام ctools_class_add
في حين أن:
ctools_class_add(array('class1', 'class2', 'class3'));
يمكنك استدعاء ذلك من أي مكان طالما لم يتم تشغيل hook_preprocess_html حتى الآن وستتم إضافة الفصول الدراسية.
يمكنك القيام بذلك عبر template_preprocess_html()
. يمكنك وضع هذا في template.php
الخاص بك ، في أي مكان يراه النسق/السمة الأساسية الأنسب (على سبيل المثال ، أوميغا مجلد ما قبل المعالجة) ، أو في وحدة مخصصة ، اعتمادًا على ما هو أكثر ملاءمة.
function mytheme_preprocess_html(&$variables) {
$variables['classes_array'][] = "class1";
$variables['classes_array'][] = "class2";
$variables['classes_array'][] = "class3";
}
على الرغم من الأسماء الموجودة في مرجع API ، يمكن استدعاء الدالات theme_preprocess
و theme_process
من الوحدات النمطية ، وليس فقط السمات. كل ما عليك فعله هو تسمية الخطاف ليتناسب مع الوحدة النمطية الخاصة بك ، على سبيل المثال mymodule_preprocess_html()
.
بافتراض أنك تستخدم وحدة 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);
}
}