Je ne sais pas pourquoi, mais Views n'ajoute pas de noms de classes CSS "lisibles par l'homme" (comme par exemple le nom de la machine de la vue) aux blocs qu'il crée ( il ajoute uniquement ses classes à la partie "contenu" générée lorsque ajout de classes à la partie " classe CSS " dans l'éditeur de vue (voir les captures d'écran ci-dessous!)).
Il ajoute uniquement les classes habituelles block block-views
et éventuellement contextual-links-region
CSS aux blocs et génère un identifiant unique (pas une classe) comme ceci: block-views-3d8f7966168beeec655c8ead69336789
(car son delta est ce code de hachage généré).
Cela n'a pas de sens d'écrire des règles CSS pour ces classes et id (comme .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }
), car ces classes / id peuvent changer lors de la modification du bloc Views.
Comment puis-je ajouter des classes CSS personnalisées dans une implémentation de hook_block_view_alter()
, si je ne peux même pas identifier ces blocs en raison de leur delta de hachage généré?
Je ne veux pas utiliser Block Class , car je pense que c'est comme une surpuissance pour simplement ajouter des classes à un ou deux blocs générés par Views (BTW j'ai vérifié le module, et je sens que la SELECT css_class, module, delta FROM {block_class}
requête est block_class_preprocess_block()
comme une surpuissance, car elle vérifie TOUS les classes ajoutées, même si le bloc est caché ...).
Je voudrais donc le résoudre à partir de mon propre module.
ÉDITER
Un exemple:
Ma vue avec le nom de la machine et les classes CSS ajoutées:
block--views--3d8f7966168beeec655c8ead69336789.tpl.php
fichier, et dans ce cas, je suis au même point que si j'avais utilisé uneif($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')
condition danshook_preprocess_block()
. C'est ce que je voulais éviter, car je pensais pouvoir utiliser un nom plus lisible par l'homme dans mon crochet. Par exemple, que se passe-t-il si je souhaite déplacer la vue dans une autre avec les mêmes paramètres, je supprime la précédente, mais utilise le même nom de machine et les mêmes classes CSS, mais le hachage unique généré change? Dans ce cas, je perds mes modifications.C'est une vieille question, mais il n'y a pas de bonne réponse. J'ai rencontré le même problème. Les solutions auxquelles je pouvais penser étaient le sélecteur parent CSS (qui n'existe pas encore) OU une manipulation Drupal.
J'ai ajouté un hook_preprocess_block pour ajouter une classe CSS wrapper à tous les blocs de vue qui définissent une classe CSS. Ce n'est pas anodin, je vais donc mettre mon code ici. Il peut ne pas fonctionner avec tous les blocs de vue, si vous avez un problème avec ce code, n'hésitez pas à le mettre à jour et à publier votre propre version.
Exemple: La vue avec la classe CSS "test" sera contenue dans un bloc avec la classe CSS "test-wrapper".
la source
Il existe un module à cet effet.
Afficher la classe supérieure du bloc
la source
Pour moi
hook_preprocess_block()
, ça n'a pas marché. (Peut-être parce que j'ai dû ajouter le bloc directement à partir d'un fichier de modèle viaviews_embed_view()
.)Cependant,
hook_preprocess_views_view()
avec une simple vérification,$vars['view']->current_display
cela a fonctionné:la source
La façon la plus simple pour moi était de dupliquer le fichier block.tpl.php, de le renommer
block--myregion.tpl.php
puis d'y ajouter mes classes.Voir: page Blocs thématiques .
la source