Dans Drupal 6, je pouvais contrôler la visibilité des blocs en utilisant du code PHP dans la configuration de l'interface utilisateur du bloc comme:
<?php return MYMODULE_abc() || MYMODULE_def() ; ?>
Ces fonctions ont recherché le nœud actuel, la taxonomie, etc. pour décider d'afficher ou non le bloc. Cette option PHP a disparu dans Drupal 8, mais il y a un $visibility
champ dans BlockBase
. Puis-je l'utiliser pour définir par programme la visibilité lors de l'exécution?
Réponses:
Un extrait de code de travail comment utiliser
hook_block_access()
. Ici, je récupère la condition à partir d'un champ du nœud actuel:Merci @Insasse d'avoir partagé le joyau suivant dans les commentaires. Pour les blocs personnalisés créés par programme, vous pouvez contrôler la visibilité directement depuis l'intérieur de la classe de bloc via
blockAccess()
:Source: Comment créer par programme un bloc dans Drupal 8
la source
En l'absence du filtre php dans Drupal 8, cela ne sera plus possible depuis l'interface utilisateur.
La seule option est d'utiliser l'api du bloc.
hook_block_access est votre meilleur candidat. De là, vous pouvez vérifier
$operation
et renvoyer un AccessResult en fonction de vos conditions.Tout comme dans l'interface utilisateur, cette fois-ci, mettre le php dans un module.
la source
Voici la solution Drupal 8: Bloquer les pages d'exclusion .
la source
Pour 8.2.x, vous devez créer un plugin de condition et implémenter le ContextProviderInterface .
Voir un exemple de DO mais il est en quelque sorte obsolète (car BlockEvent et BlockSubscriberBase ont été supprimés au profit d'un service de référentiel de contexte).
Il serait également intéressant d'utiliser la console Drupal pour générer le plugin:
la source
pour étendre les possibilités de visibilité des blocs, vous pouvez essayer ce patch:
https://www.drupal.org/project/drupal/issues/923934#comment-12401360
il introduit l' opérateur de conjonction ET / OU pour les conditions de visibilité afin que vous puissiez dire oh je veux que ce bloc soit visible s'il est de mon_contenu_type OU l' utilisateur a le rôle d'administrateur OU l'url commence par mon / chemin / vers / * etc .. aussi les conditions pourrait être annulé afin que vous puissiez définir un grand nombre de conditions auxquelles vous ne voulez pas que votre bloc soit visible
également si vous utilisez le module Drupal Commerce, vous pouvez essayer ce qui précède en installant le module https://www.drupal.org/project/commerce_quick_purchase notez qu'être installé le module expose cette fonctionnalité pour tous les blocs du système même si vous ne le faites pas '' t utiliser le bloc fourni par le module voir plus
https://github.com/drugan/commerce_quick_purchase#block-visibility
en outre, vous pouvez créer votre propre plugin de condition voir l'exemple du module
https://cgit.drupalcode.org/commerce_quick_purchase/tree/src/Plugin/Condition
la source