it-swarm.com.de

Eine Klasse zu "body" hinzufügen

Wie kann ich das <body>-Tag ändern oder vorverarbeiten, um den Klassenhauptteil hinzuzufügen? Ich möchte keine ganze html.tpl.php erstellen, nur um eine Klasse hinzuzufügen.

33
Chris Muench

Verwenden Sie in der template.php-Datei Ihres Themas den preprocess_html-Haken:

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

Denken Sie daran, die Caches zu löschen, wenn Sie den Hook implementiert haben, da Drupal ihn nicht abholen kann.

50
Clive

Die Dokumentation für die html.tpl.php-Vorlage dokumentiert die $classes-Variablen als String von Klassen, die für die kontextuelle Formatierung durch CSS verwendet werden können.. Wenn Sie sich den Code für die Vorlage ansehen, wird diese Variable in den Klassenattributen des produzierten body-Elements verwendet:

<body class="<?php print $classes; ?>" <?php print $attributes;?>>

Die $classes-Variablen sind tatsächlich bereits von template_process() für eine Vorlagendatei festgelegt und werden aus dem Inhalt der $classes_array-Variablen erstellt.

Um dem Body Ihrer Seite eine Klasse hinzuzufügen, sollten Sie diese Klasse dem $classes_array-Wert aus der Implementierung von hook_preprocess_html() Ihres Designs (oder Moduls) hinzufügen:

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

Da dies die von core definierte Vorlage und Prozessfunktion ist, sollte jedes gut verhaltene Design die gleichen Variablen verwenden.

8
Pierre Buyle

Ich musste verschiedene Array-Schlüssel in demselben Hook verwenden, damit es funktioniert:

function THEME_preprocess_html(&$vars) {
  $vars['attributes_array']['class'][] = 'foo2';
}
3
Hannes Kirsman

Mit dem Modul Context können Sie dem body-Tag auch eine Klasse hinzufügen.

Dies kann nützlich sein, wenn die Klasse unter bestimmten Bedingungen hinzugefügt werden muss.

Sie finden diese Optionen unter der Reaktion "Theme HTML":

Theme HTML option in Context UI

2
batigolix

Common Body Class Modul ermöglicht Benutzern das Hinzufügen von Klassen zu einer beliebigen Seite über eine Schnittstelle ..__ Die Schnittstelle verfügt über Optionen zur Auswahl mehrerer Benutzerrollen sowie Seiten, auf denen die Klasse dargestellt werden kann.

Example

Die Antwort scheint vom Kontext abzuhängen. Folgendes habe ich über Versuch und Irrtum herausgefunden:

Wenn sich hook_preprocess_html () in einem module befindet, verwenden Sie $ vars ['classes_array'] [].

Wenn es sich um ein theme handelt, verwenden Sie $ vars ['attributes_array'] ['class'] [].

1
jaskho

Ich habe diese Technik auf eine Site angewendet, die jemand anderes erstellt hat. Es hat zuerst nicht funktioniert, aber dann tiefer gegraben und festgestellt, dass die Variable $ classes nicht in der TPL-Datei ausgegeben wurde. Wenn es nicht funktioniert, überprüfen Sie das.

0
user2390505