web-dev-qa-db-fra.com

Comment désactiver / masquer / désinstaller un bloc par programme?

J'ai une page dont le contenu n'est visible que dans certaines provinces. Lorsque des personnes visitent cette page depuis une province différente de celle pour laquelle elle est définie, elle doit envoyer un message disant "le contenu n'est pas disponible dans la région" en écrasant le corps du nœud dans la même page, en utilisant hook_node_view. Mais j'ai activé les blocs dans la zone de contenu de cette page. existe-t-il un moyen de désactiver le contenu du bloc? j'ai essayé hook__block_view et hook__block_view_alter Mais cela n'a pas fonctionné. Est-ce que quelqu'un peut m'aider?

4
Jons

Tu pourrais essayer hook_block_list_alter pour masquer un bloc spécifique.

Agissez sur les blocs avant le rendu.

Ce crochet vous permet d'ajouter, de supprimer ou de modifier des blocs dans la liste des blocs. La liste des blocs contient les définitions des blocs, pas les blocs rendus. Les blocs sont rendus après que les modules ont eu la possibilité de manipuler la liste des blocs.

5
StijnTilleman

Cette question est assez ancienne, mais sans réponse, donc je répondrais pour le compte rendu.

Lorsque vous installez Drupal avec le profil d'installation standard, certains blocs (Recherche, Connexion, Navigation, ...) sont activés automatiquement.

Donc, si vous jetez un œil dans profiles/standard/standard.install , vous verrez que les blocs sont activés avec une requête db et sont relatifs à un thème.

La désactivation d'un bloc n'est donc qu'une requête de mise à jour:

db_update('block')
  ->fields([
    'status' => 0,
  ])
  ->condition('theme', 'your_theme')
  ->condition('module', 'the_module_providing_the_block')
  ->condition('delta', 'the_block_delta')
  ->execute()
;

Vous devrez peut-être vider les caches après cela.

4
Manu

La solution ninja pour ce cas serait un hook_page_alter . De plus, hook_block_view_alter est un hook valide donc je ne sais pas pourquoi vous ne pouvez pas le faire fonctionner.

Si votre bloc provient de vues, vous pouvez définir des arguments délicats pour masquer le bloc sans paramètres ni codage supplémentaires.

En outre, vous pouvez définir des paramètres de visibilité par bloc en tant que code php.

2
AyeshK