Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Hinzufügen einer CSS Klasse mittels Render Array

Eingetragen von culfin (28)
am 08.12.2013 - 11:25 Uhr in
  • Themes & Theming
  • Drupal 7.x

Hi zusammen,

ich möchte gerne einigen HTML Standardelementen (h1, button, table, ...) feste Klassen zuweisen.
Hierzu habe ich die Funktion theme_html_tag gefunden, mit der dies möglich sein soll:
https://api.drupal.org/api/drupal/includes!theme.inc/function/theme_html_tag/7

Leider bekomme ich es nicht hin, dies in mein Theme zu integrieren.
Verwende ich hierfür eine preprocess Funktion und wie müsste diese aussehen?

Könnte mir jemand mit einem Beispiel auf die Sprünge helfen?

Vielen Dank,

Andreas

‹ Hauptmenü nur zum Teil auf Android-Tablet sichtbar Hinzufügen einer CSS Klasse mittels Render Array ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich glaube, Du bringst da

Eingetragen von wla (9461)
am 08.12.2013 - 12:30 Uhr

Ich glaube, Du bringst da etwas durcheinander. Eine Theme-Funktion ist selbständig und braucht keine Preprozess-Funktion. Eine Theme-Funktion gibt Inhalte als HTML-Code aus, wobei dazu der Aufruf weiterer Theme-Funktionen ausgeführt werden kann.
Du baust diese Theming-Funktion in Deinem Theme ein, indem du die Funktion THEMENAME_html_tag in der template.php Deines Themes definierst (also die Funktion aus dem Core in die template.php kopieren und den Funktionsnamen ändern. Das Wort theme im Funktionsnamen wird durch den internen Namen Deines Themes ersetzt d.h. wie der .info-File heißt). Nachdem Du das getan hast, wird jeglicher HTML-Code in Deiner Funktion erstellt. Du kannst jetzt testen, was für ein Tag vorliegt, und entsprechende Klassen in die Ausgabe einbauen.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Werner,danke für die

Eingetragen von culfin (28)
am 08.12.2013 - 12:52 Uhr

Hallo Werner,

danke für die schnelle Antwort, ich glaube jetzt hab ich es etwas besser verstanden.
Irritierend für mich war, das in diesem Kommentar https://api.drupal.org/comment/49603#comment-49603 eine Preprocess function dafür verwendet wird.

Kannst Du mir sagen wie beispielsweise die Funktion THEMENAME_html_tag konkret aussehen müsste, wenn ich dem Tag <h1> dauerhaft class="ui header" hinzufügen möchte?

Danke schonmal im Voraus.

Andreas

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das ist jetzt ungetestet,

Eingetragen von wla (9461)
am 08.12.2013 - 13:12 Uhr

Das ist jetzt ungetestet, sollte aber etwa so aussehen:

<?php
function THEMENAME_html_tag($variables) {
 
$element = $variables['element'];
 
$attributes = isset($element['#attributes']) ? drupal_attributes($element['#attributes']) : '';
  if (
$element['#tag'] == "h1") {
   
$attributes['class'][] = 'ui-header';
  }
  if (!isset(
$element['#value'])) {
    return
'<' . $element['#tag'] . $attributes . " />\n";
  }
  else {
   
$output = '<' . $element['#tag'] . $attributes . '>';
    if (isset(
$element['#value_prefix'])) {
     
$output .= $element['#value_prefix'];
    }
   
$output .= $element['#value'];
    if (isset(
$element['#value_suffix'])) {
     
$output .= $element['#value_suffix'];
    }
   
$output .= '</' . $element['#tag'] . ">\n";
    return
$output;
  }
}
?>

Denke daran, das Wort THEMENAME durch den Namen Deines Themes zu ersetzen.

Beste Grüße
Werner

edit: Der Name der Klasse kann kein Blank enthalten!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für das Beispiel.

Eingetragen von culfin (28)
am 09.12.2013 - 10:14 Uhr

Danke für das Beispiel. Leider bleibt es aber wirkungslos :-(

Kann es sein, das die Elemente, die direkt in den tpl.php Dateien stehen hiervon nicht betroffen sind oder noch Elemente dem Render Array hinzugefügt werden, nachdem die Funktion html_tag aufgerufen wurde?

Oder kann man das evtl. mit irgendeiner process Funktion lösen, die erst ganz am Schluss aufgerufen wird?

Danke nochmals,

Andreas

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du mußt Dir klar machen, daß

Eingetragen von wla (9461)
am 09.12.2013 - 10:44 Uhr

Du mußt Dir klar machen, daß ein TPL-File die direkte Ausgabe der vorbereiteten Inhalte (die dazu in Variablen vorliegen) steuert. Da wird vielleicht noch mal irgendwo die render-Funktion aufgerufen, aber das, was Du direkt als HTML-Ausgabe im TPL-File einträgst, wird nirgendwo sonst mehr von Drupal verarbeitet. Da kann also diese Funktion auch nicht greifen. Da mußt Du die Klassen selbst in den HTML-Code setzen. Bei Views ist das ähnlich in den Teilen, bei denen Du beim Überschreiben eigenen HTML-Code einträgst. Auch der bleibt unverändert.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Okay, danke. Die TPL Dateien

Eingetragen von culfin (28)
am 09.12.2013 - 11:07 Uhr

Okay, danke. Die TPL Dateien kann ich dann ja einfach mittels search&replace im Texteditor modifizieren.

Trotzdem werden dem Render Array offenbar noch HTML Elemente hinzugefügt, nachdem die Funktion html_tag aufgerufen wird.
Gibt es eine Möglichkeit, den Render Array ganz zum Schluss (also unmittelbar vor der Ausgabe) zu modifizieren?

Danke,

Andreas

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 14 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Tagen 6 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 8 Wochen 5 Stunden
  • Update: jetzt gibt's ein
    vor 8 Wochen 23 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 22 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association