Ich möchte dem Tag eine benutzerdefinierte CSS-Klasse hinzufügen <body>
. Ich benutze Drupal 7 / Corolla.
Wie kann ich das programmgesteuert von meinem benutzerdefinierten Modul aus tun?
Ich möchte dem Tag eine benutzerdefinierte CSS-Klasse hinzufügen <body>
. Ich benutze Drupal 7 / Corolla.
Wie kann ich das programmgesteuert von meinem benutzerdefinierten Modul aus tun?
Die Vorverarbeitungsfunktionen können aus Modulen und Themen implementiert werden.
Die von Ihnen benötigte Vorverarbeitungsfunktion ist hook_preprocess_html()
und die zu setzende Variable $variables['classes_array']
ist ein Array, das alle für das <body>
Element gesetzten Klassen enthält . Der Inhalt der Datei html.tpl.php , die standardmäßig von Drupal verwendet wird (wenn das Design keine andere Vorlagendatei verwendet), ist der folgende:
<!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>
In Ihrem Modul implementieren Sie die Vorverarbeitungsfunktion wie folgt:
function mymodule_preprocess_html(&$variables) {
$variables['classes_array'][] = "new-class";
}
template_process () wird dann verwendet $variables['classes_array']
, um $variables['classes']
den folgenden Code einzufügen:
$variables['classes'] = implode(' ', $variables['classes_array']);
Die Verwendung einer Vorverarbeitungsfunktion in einem Modul ist vorzuziehen, wenn Ihre Site mehr als ein Thema verwendet oder wenn das für Ihre Site festgelegte Thema nicht das von Ihnen erstellte ist. In diesem Fall können Sie Ihre benutzerdefinierten CSS-Klassen festlegen und diese nicht verlieren, wenn Sie das Thema aktualisieren oder einfach das von Ihrer Site verwendete Standardthema ändern. Wenn Ihre Site nur ein Thema verwendet und dieses Thema ein benutzerdefiniertes Thema ist, das Sie erstellt haben, können Sie die Vorverarbeitungsfunktion in Ihrem benutzerdefinierten Thema implementieren. Während Sie das Thema pflegen, gehen die CSS-Klassen beim Aktualisieren Ihres Themas nicht verloren.
fügen Sie zu MODULENAME.module hinzu und leeren Sie den Cache
quelle
Während Sie dies über hook_preprocess_html tun können, befinden Sie sich häufig in einem völlig anderen Teil Ihrer Codebasis, wenn Sie dies benötigen. Wenn dies der Fall ist, würde ich vorschlagen, dass Sie
ctools_class_add
stattdessen Folgendes verwenden :Sie können das von überall aus aufrufen, solange hook_preprocess_html noch nicht ausgeführt wurde und die Klassen hinzugefügt werden.
quelle
Angenommen, Sie verwenden das pathauto-Modul, um automatisch semantische Pfade für Ihre Inhaltsseiten basierend auf dem Menüpfad zu erstellen, können Sie mit dem Seitenpfad die Klassen erstellen, nach denen Sie suchen:
quelle
Sie können dies über tun
template_preprocess_html()
. Sie können dies in Ihrtemplate.php
, wo immer Ihr Thema / Basisthema am besten geeignet erscheint (z. B. Omega- Vorverarbeitungsordner), oder in ein benutzerdefiniertes Modul einfügen, je nachdem, was am besten geeignet ist.Trotz der Namen in der API-Referenz können die Funktionen
theme_preprocess
undtheme_process
von Modulen und nicht nur von Themen aufgerufen werden. Sie müssen nur den Haken benennen, der zu Ihrem Modul passt, zmymodule_preprocess_html()
.quelle