HTML "gövde" etiketine program aracılığıyla nasıl sınıf eklerim?


13

Özel bir eklemek istiyorum CSS sınıfı için <body>etiketi. Drupal 7 / Corolla kullanıyorum.

Özel modülümden programlı olarak nasıl yapabilirim?

Yanıtlar:


13

Önişleme fonksiyonları modüllerden ve temalardan uygulanabilir.

İhtiyacınız olan önişleme işlevi hook_preprocess_html()ve ayarlanacak değişken $variables['classes_array'], <body>öğe için ayarlanan tüm sınıfları içeren bir dizidir . Drupal tarafından varsayılan olarak kullanılan html.tpl.php dosyasının içeriği ( tema farklı bir şablon dosyası kullanmıyorsa) aşağıdaki gibidir:

<!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>

Modülünüzde önişleme işlevini aşağıdaki gibi uygularsınız:

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

template_process () daha sonra aşağıdaki kodla $variables['classes_array']doldurmak $variables['classes']için kullanır :

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

 

Siteniz birden fazla tema kullanıyorsa veya siteniz için ayarlanan tema oluşturduğunuz tema değilse, bir modülde önişleme işlevinin kullanılması tercih edilir. Bu durumda, özel CSS sınıflarınızı ayarlayabilir ve temayı güncellerken veya siteniz tarafından kullanılan varsayılan temayı değiştirirken bunları kaybedemezsiniz. Siteniz yalnızca bir tema kullanıyorsa ve bu tema oluşturduğunuz özel bir temaysa, önişleme işlevini özel temanıza uygulayabilirsiniz. Temayı sürdürdükçe, temanızı güncellerken CSS sınıfları kaybolmaz.


Evet, genellikle her modülde preprocess_html aracılığıyla modül adına takılırım, böylece tema JS istenirse algılayabilir.
mpdonadio

9

MODULENAME.module'a ekle ve önbelleği temizle

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

4

Bunu hook_preprocess_html aracılığıyla yapabilmenize rağmen, buna ihtiyaç duyduğunuzda kod tabanınızın tamamen farklı bir bölümünde olacaksınız. Bu durumda, ctools_class_addbunun yerine kullanmanızı öneririz :

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

Hook_preprocess_html henüz çalışmadığı ve sınıflar ekleneceği sürece bunu her yerden çağırabilirsiniz.


1

İçerik sayfalarınız için menü yoluna göre otomatik olarak anlamsal yollar oluşturmak için pathauto modülünü kullandığınızı varsayarak, aradığınız sınıfları oluşturmak için sayfanın yolunu kullanabilirsiniz:

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

Bunu ile yapabilirsiniz template_preprocess_html(). Bunu, template.phptemanızın / temel temanızın en uygun gördüğü yere (örneğin, Omega önişleme klasörü) veya en uygun olana bağlı olarak özel bir modüle koyabilirsiniz .

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

API başvurusundaki adlara rağmen, theme_preprocessve theme_processişlevleri yalnızca temalardan değil modüllerden de çağrılabilir. Tek yapmanız gereken modülünüze uyacak şekilde kancayı adlandırmaktır, örn mymodule_preprocess_html().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.