Wie füge ich einem Block ein Klassenattribut hinzu?

Wie kann ich einem Drupal 8-Block ein Klassenattribut hinzufügen?

Im Drupal-Kern gibt es viele Beispiele, z. B. die Hilfemodule Dadurch werden die Attribute role für den Block festgelegt. Anschließend kann ich eine Klasse erfolgreich hinzufügen.

/** * Implements hook_preprocess_HOOK() for block templates. */ function mymodule_preprocess_block(&$variables) { if ($variables["plugin_id"] == "mymodule_my_block") { $variables["attributes"]["class"][] = "my-nice-block"; } } 

Ist es möglich, eine Klasse ohne den Vorverarbeitungs-Hook hinzuzufügen? Idealerweise in der Block-Plugin-Datei in src / Plugin / Block /?

Dies würde dazu beitragen, den gesamten Code für einen Block an einem Ort zu speichern.

Antwort

Haben Sie versucht, #attributes für das von unserem Block-Plugin zurückgegebene Render-Array festzulegen?

$build["#attributes"]["class"][] = "my-nice-block"; 

Wenn Sie sich BlockViewBuilder::preRender() ansehen, sollte dies funktionieren.

Antwort

Sie können das Modul Block Class überprüfen.

Mit Block Class können Benutzer jedem Block über die Konfigurationsoberfläche des Blocks Klassen hinzufügen. Durch Hinzufügen eines sehr kurzen PHP-Ausschnitts zu einem Thema „s block.tpl.php Datei können Klassen zum übergeordneten Element eines Blocks hinzugefügt werden. Hurra für ein leistungsfähigeres Block-Theming!

Antwort

Finde eine Zweigvorlage Benennen Sie einen Vorschlag für Ihren Block (unter Verwendung von Twig-Debug-Kommentaren) und überschreiben Sie ihn.

Themen / Vorlagen / Block – my-custom-block.html.twig

{% extends "block.html.twig" %} {# /** * @file * Theme override for tabs. */ #} {% block title %} {{ title_prefix }} {% if label %} <h2{{ title_attributes.addClass(title_classes, "accordion") }}{{ title_attributes.setAttribute("id", "campus") }}> {{ label }} <i class="fa fa-plus" aria-hidden="true"></i> </h2> {% endif %} {{ title_suffix }} {% endblock %} 

Antwort

1. Erstellen Sie die Datei hello.config

 my_module_name/config/install/my_module_name.config content this code: color :"blue" color_red: "red" 

2. Hängen Sie Ihre Bibliotheksdatei my_module_name.libraries.yml an

 // This function below is located on my_module_name.module file function my_module_name_page_attachments(array &$page){ $page["#attached"]["library"][]= "my_module_name/library_name"; } 

3. Legen Sie die Klasse in der Datei my_module_name.module fest.

Funktion my_module_name_preprocess_block (Array & $ variables) {

// Get the value of my color content in my_module_name/config/install/my_module_name.config $class = \Drupal::config("my_module_name.config")->get("color"); 

// ID des Blocks abrufen

 $id= $variables["elements"]["#id"]; $block = Block::load($id); 

// Region mit dem abrufen Block

 $region = $block->getRegion(); if($region == "name_of_the_block_id"){ // Set the class $variables["attributes"]["class"][] = $class ; } } 

4. my_module_name.libraries.yml

hier ist my_module_name der Name meiner Bibliothek

Geben Sie hier die Bildbeschreibung ein.

5. Erstellen Sie Ihre CSS-Datei css / my_module_name.css

.red {Hintergrund: rot! Wichtig; }

.green {Hintergrund: grün! wichtig; }

.yellow {Hintergrund: gelb! wichtig; }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.