Hur kan jag lägga till ett klassattribut till ett Drupal 8-block?
Det finns många exempel i Drupal-kärnan som hjälpmodulerna som ställer in attributen roll för blocket. Så efter det kan jag lyckas lägga till en klass.
/** * 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"; } }
Är det möjligt att lägga till en klass utan förbehandlingshaken? Helst inom block-plugin-filen i src / Plugin / Block /?
Detta skulle hjälpa till att hålla all kod relaterad till ett block som finns på en plats.
Svar
Har du försökt att bara ställa in #attribut på renderingsmatrisen som returneras av vårt blockplugin?
$build["#attributes"]["class"][] = "my-nice-block";
Tittar på BlockViewBuilder::preRender()
, det ska fungera.
Svar
Du kan kontrollera Blockera klass -modulen.
Blockklass tillåter användare att lägga till klasser i valfritt block genom blockets konfigurationsgränssnitt. Genom att lägga till ett mycket kort utdrag av PHP till temat ”s
block.tpl.php
fil kan klasser läggas till i blockets överordnade element. Hurra för mer kraftfull blocktema!
Svar
hitta en kvistmall namnförslag för ditt block (med hjälp av felsökningskommentarer) och åsidosätt det
teman / mallar / 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 %}
Svar
1. Skapa hello.config-fil
my_module_name/config/install/my_module_name.config content this code: color :"blue" color_red: "red"
2. Bifoga din biblioteksfil 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. Ställ in klassen i my_module_name.module-filen
funktion 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å blockets ID
$id= $variables["elements"]["#id"]; $block = Block::load($id);
// Få regionen som har blockera
$region = $block->getRegion(); if($region == "name_of_the_block_id"){ // Set the class $variables["attributes"]["class"][] = $class ; } }
4. my_module_name.libraries.yml
här, my_module_name är namnet på mitt bibliotek
5. Skapa din css-fil css / my_module_name.css
.röd {bakgrund: röd! Viktigt; }
.grön {bakgrund: grön! viktigt; }
.gul {bakgrund: gul! viktigt; }