Jak mogę dodać atrybut klasy do bloku w Drupalu 8?
W rdzeniu Drupala jest wiele przykładów, takich jak moduły pomocy która ustawia atrybuty role dla bloku. Zatem mogę z powodzeniem dodać klasę.
/** * 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"; } }
Czy można dodać klasę bez przechwytywania preprocesu? Najlepiej w pliku wtyczki bloku znajdującym się w src / Plugin / Block /?
Pomogłoby to w utrzymaniu całego kodu związanego z jednym blokiem zawartym w jednym miejscu.
Odpowiedź
Czy próbowałeś po prostu ustawić #attributes w tablicy renderowania zwróconej przez naszą wtyczkę blokową?
$build["#attributes"]["class"][] = "my-nice-block";
Patrząc na BlockViewBuilder::preRender()
, to powinno działać.
Odpowiedź
Możesz sprawdzić moduł Block Class .
Klasa Block umożliwia użytkownikom dodawanie klas do dowolnego bloku za pośrednictwem interfejsu konfiguracyjnego bloku. Poprzez dodanie bardzo krótkiego fragmentu kodu PHP do motywu „s
block.tpl.php
plik, klasy mogą być dodawane do elementu nadrzędnego bloku. Brawo za mocniejsze motywy bloków!
Odpowiedz
znajdź szablon gałązki sugestię nazwy dla twojego bloku (używając komentarzy debugowania twig) i nadpisz ją
motywy / szablony / blok – 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 %}
Odpowiedź
1. Utwórz plik hello.config
my_module_name/config/install/my_module_name.config content this code: color :"blue" color_red: "red"
2. Załącz plik biblioteki 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. Ustaw klasę w pliku my_module_name.module
function my_module_name_preprocess_block (array & $ zmienne) {
// 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");
// Uzyskaj identyfikator bloku
$id= $variables["elements"]["#id"]; $block = Block::load($id);
// Pobierz region mający blok
$region = $block->getRegion(); if($region == "name_of_the_block_id"){ // Set the class $variables["attributes"]["class"][] = $class ; } }
4. nazwa_modułu.libraries.yml
tutaj nazwa_modułu to nazwa mojej biblioteki
5. Utwórz plik css css / my_module_name.css
.red {background: red! Important; }
.green {background: green! important; }
. żółty {tło: żółte! ważne; }