Comment ajouter un attribut de classe à un bloc?

Comment puis-je ajouter un attribut de classe à un bloc Drupal 8?

Il existe de nombreux exemples dans le noyau de Drupal tels que les modules daide qui définit les attributs role pour le bloc. Donc, après cela, je peux ajouter une classe avec succès.

/** * 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"; } } 

Est-il possible dajouter une classe sans le hook de prétraitement? Idéalement dans le fichier de plugin de bloc situé dans src / Plugin / Block /?

Cela aiderait à garder tout le code lié à un bloc contenu dans un seul emplacement.

Réponse

Avez-vous simplement essayé de définir #attributes sur le tableau de rendu renvoyé par notre plugin de bloc?

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

En regardant BlockViewBuilder::preRender(), cela devrait fonctionner.

Réponse

Vous pouvez vérifier le module Block Class .

Block Class permet aux utilisateurs dajouter des classes à nimporte quel bloc via linterface de configuration du bloc. En ajoutant un très court extrait de PHP à un thème « s block.tpl.php fichier, des classes peuvent être ajoutées à lélément parent dun bloc. Hourra pour un thème de bloc plus puissant!

Réponse

trouver un modèle de brindille suggestion de nom pour votre bloc (en utilisant les commentaires de débogage Twig) et remplacez-le

themes / templates / 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 %} 

Réponse

1. Créez le fichier hello.config

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

2. Joindre votre fichier de bibliothèque 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. Définissez la classe dans le fichier my_module_name.module

function 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"); 

// Récupère lID du bloc

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

// Récupère la région ayant le block

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

4. my_module_name.libraries.yml

ici, my_module_name est le nom de ma bibliothèque

entrez la description de limage ici

5. Créez votre fichier css css / my_module_name.css

.red {background: red! Important; }

.green {arrière-plan: vert! important; }

.yellow {arrière-plan: jaune! important; }

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *