Jak dodać atrybut klasy do bloku?

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

tutaj wprowadź opis obrazu

5. Utwórz plik css css / my_module_name.css

.red {background: red! Important; }

.green {background: green! important; }

. żółty {tło: żółte! ważne; }

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *