web-dev-qa-db-fra.com

Existe-t-il un moyen de définir la visibilité des blocs par programmation sans utiliser le module de filtre PHP?

En activant le noyau PHP Module de filtrage, je peux utiliser PHP code pour définir la visibilité d'un bloc dans la page de configuration de bloc).

Mais je ne veux pas activer le module de filtre PHP pour la mesure de sécurité. Donc existe-t-il un moyen de le faire dans le module personnalisé? Je ne trouve pas de crochet faisant ainsi. Et un crochet proche hook_block_view_alter ne peut que modifier le contenu du bloc.

11
gilzero

Oui. Définir le contenu des blocs sur false le masquera de l'affichage et masquera la région si aucun autre bloc n'est présent. J'imagine que vous auriez besoin d'une configuration similaire à la suivante:

$block['content'] = _my_module_custom_block();

...

function _my_module_custom_block(){
    if( HIDE_CONDITION )
        return false;
}
13
Sam152

Le module visibilité du bloc de règles est une autre alternative disponible ... qui ne nécessite pas le filtre PHP pour être activé. Voici une citation de sa page de projet:

Le module de visibilité des blocs de règles permet d'utiliser les composants Rules pour contrôler la visibilité des blocs. Cela offre aux administrateurs et développeurs Drupal une extrême flexibilité pour contrôler le moment où les blocs doivent être affichés sur leurs sites Web, en plus des options de visibilité par défaut fournies par Drupal.

L'idée générale est que si vous pouvez le faire avec des règles, vous pouvez l'utiliser pour contrôler la visibilité des blocs, donc les possibilités sont illimitées.

Vous devez afficher un bloc uniquement pour les utilisateurs enregistrés il y a plus d'un mois?

Vous avez peut-être un bloc qui ne doit être affiché qu'entre 8 h et 17 h en semaine?

Qu'en est-il de l'affichage ou du masquage d'un bloc en fonction des conditions météorologiques actuelles?

Tout cela peut être fait en utilisant la visibilité des blocs de règles.

De plus, selon le " si vous pouvez le faire avec des règles, vous pouvez l'utiliser pour contrôler la visibilité des blocs" ci-dessus, vous avez le pouvoir de Rules disponible pour implémenter toutes sortes de logiques personnalisées (cf. la partie "programmation/module personnalisé" de votre question).

Pour une illustration de l'utilisation de ce module, reportez-vous à ma réponse à " Comment empêcher l'affichage d'un bloc de vues aux administrateurs, tel que user/1? ".

1
Pierre.Vriens