it-swarm.asia

كيف أقوم بإضافة فئة إلى علامة HTML "نص" برمجياً؟

أود إضافة فئة CSS مخصصة إلى <body> بطاقة شعار. أنا أستخدم Drupal 7/Corolla.

كيف يمكنني القيام بذلك برمجيًا من الوحدة النمطية المخصصة الخاصة بي؟

12
giorgio79

يمكن تنفيذ وظائف ما قبل المعالجة من الوحدات والموضوعات.

دالة ما قبل المعالجة التي تحتاجها هي 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 عند تحديث السمة.

12
kiamlaluno

إضافة إلى MODULENAME.module ومسح ذاكرة التخزين المؤقت

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

بينما يمكنك القيام بذلك من خلال hook_preprocess_html ، غالبًا ما تكون في جزء مختلف تمامًا من قاعدة التعليمات البرمجية عندما تحتاج إلى ذلك. إذا كانت هذه هي الحالة ، أقترح عليك استخدام ctools_class_add في حين أن:

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

يمكنك استدعاء ذلك من أي مكان طالما لم يتم تشغيل hook_preprocess_html حتى الآن وستتم إضافة الفصول الدراسية.

4
Angry Dan

يمكنك القيام بذلك عبر 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().

1
mpdonadio

بافتراض أنك تستخدم وحدة 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
Iqbal