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 - 12: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 (9464)
am 08.12.2013 - 13: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 - 13: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 (9464)
am 08.12.2013 - 14: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 - 11: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 (9464)
am 09.12.2013 - 11: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 - 12: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

  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
Weiter

Neue Kommentare

  • Verwende doch das Tag dafür,
    vor 4 Tagen 11 Stunden
  • Guckst du hier: step by step
    vor 4 Tagen 1 Stunde
  • Guckst du hier: step by step
    vor 4 Tagen 1 Stunde
  • Ich habe ja keine Angst vor
    vor 1 Woche 6 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 2 Wochen 1 Tag
  • Vielen Dank erst einmal, aber
    vor 2 Wochen 3 Tagen
  • Du hast die "Trusted host
    vor 2 Wochen 3 Tagen
  • Bitte genauer den aktuellen Lösungs-Ansatz beschreiben
    vor 4 Wochen 2 Tagen
  • Git und rsync sind die wichtigsten Werkzeuge
    vor 4 Wochen 6 Tagen
  • Arrrrg. Nix Tabelle :-D /*
    vor 9 Wochen 1 Tag

Statistik

Beiträge im Forum: 250284
Registrierte User: 20498

Neue User:

  • Inga GuAph
  • Robertolix
  • DavidBit

» Alle User anzeigen

User nach Punkten sortiert:
wla9464
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 24 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