Hvordan kan jeg legge til et klasseattributt til en Drupal 8-blokk?
Det er mange eksempler i Drupal-kjerne, for eksempel hjelpemodulene som setter attributtene rolle for blokken. Så etterpå kan jeg lykkes med å legge til en klasse.
/** * 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"; } }
Er det mulig å legge til en klasse uten forbehandlingskroken? Ideelt sett innenfor blokk-plugin-filen som ligger i src / Plugin / Block /?
Dette vil bidra til å holde all koden relatert til en blokk som finnes på ett sted.
Svar
Har du prøvd å bare sette #attributter på gjengivelsesmatrisen som er returnert av blokk-pluginet vårt?
$build["#attributes"]["class"][] = "my-nice-block";
Ser vi på BlockViewBuilder::preRender()
, det skal fungere.
Svar
Du kan sjekke Blokker klasse -modulen.
Block Class tillater brukere å legge til klasser i hvilken som helst blokk gjennom blokkens konfigurasjonsgrensesnitt. Ved å legge til et veldig kort utdrag av PHP til temaet «s
block.tpl.php
fil, kan klasser legges til i det overordnede elementet i en blokk. Hurra for mer kraftfull blokkering!
Svar
finn en kvistmal navneforslag for blokkeringen din (ved hjelp av feilsøkingskommentarer) og overstyr den
temaer / maler / blokk – my-custom-block.html.twig / p>
{% 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 %}
Svar
1. Opprett hello.config-fil
my_module_name/config/install/my_module_name.config content this code: color :"blue" color_red: "red"
2. Legg til biblioteksfilen my_module_name.libraries.yml
// 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. Sett klassen i my_module_name.module-filen
funksjon my_module_name_preprocess_block (array & $ variabler) {
// 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");
// Få ID for blokken
$id= $variables["elements"]["#id"]; $block = Block::load($id);
// Få regionen som har blokker
$region = $block->getRegion(); if($region == "name_of_the_block_id"){ // Set the class $variables["attributes"]["class"][] = $class ; } }
4. my_module_name.libraries.yml
her, my_module_name er navnet på biblioteket mitt
5. Opprett css-filen din css / my_module_name.css
.rød {bakgrunn: rød! Viktig; }
.grønn {bakgrunn: grønn! viktig; }
.gul {bakgrunn: gul! viktig; }