Est-ce possible pour un module de savoir quand l'un de ses blocs émis en sortie sur le tableau de bord, et modifier le contenu de ce bloc?

drupal.stackexchange https://drupal.stackexchange.com/questions/514

  •  16-10-2019
  •  | 
  •  

Question

Drupal 7 présente un nouveau module de noyau (dashboard.module) qui permet aux utilisateurs avec les permissions d'ajouter des blocs définis à partir des sites tiers à la planche de bord, qui est représenté en tant que revêtement sur la page en cours.

Est-il possible pour un module qui implémente des blocs de savoir quand le bloc est rendu sur le tableau de bord?
L'idée serait de modifier le contenu du bloc, et de le rendre plus petit (par exemple).

Était-ce utile?

La solution 2

En regardant le code de dashboard.module, je trouve la fonction suivante:

/**
 * Implements hook_block_list_alter().
 *
 * Skip rendering dashboard blocks when not on the dashboard page itself. This
 * prevents expensive dashboard blocks from causing performance issues on pages
 * where they will never be displayed.
 */
function dashboard_block_list_alter(&$blocks) {
  if (!dashboard_is_visible()) {
    foreach ($blocks as $key => $block) {
      if (in_array($block->region, dashboard_regions())) {
        unset($blocks[$key]);
      }
    }
  }
}

dashboard_is_visible () est la fonction qui renvoie TRUE lorsque le tableau de bord est visible, et (dashboard_regions) est la fonction qui renvoie un tableau contenant la liste des régions contenues dans le tableau de bord.

Ce sont les fonctions qui permettent à un module de savoir quand ses blocs sont rendus dans le tableau de bord. Le seul problème est pour le module de savoir à quelle région ses blocs sont associés, comme l'objet de bloc n'est pas passé à la hook_block_view () . Drupal 7 utilise de nouveaux crochets, hook_block_view_alter () et hook_block_view_MODULE_DELTA_alter () , dont le deuxième paramètre est l'objet de bloc. La mise en oeuvre de ces crochets est possible de modifier le stationnement de bloc sur le fait que le bloc est en cours de rendu dans le tableau de bord, ou non.

En supposant que mymodule est le nom court du module et test_block est la valeur delta, le module doit utiliser la fonction suivante:

/**
 * Implements hook_block_view_MODULE_DELTA_alter().
 */
function mymodule_block_view_mymodule_test_block_alter(&$data, $block) {
  if (dashboard_is_visible() && in_array($block->region, dashboard_regions())) {
    // The block is rendered in the dashboard.
  }
}

Autres conseils

Vous pouvez vérifier l'argument url que le bloc est affiché sur et si elle correspond à un motif attendu à savoir / tableau de bord, vous pouvez modifier le contenu du bloc. Cette solution ne fonctionne vraiment si vous avez le bloc vous avons écrit.

Mise à jour: Cette méthode va toujours fonctionner, même si je ne suis pas familier module de tableau de bord 7s assez pour commenter davantage drupal. La seule chose que je suggère est de variables de page de sortie et voir s'il est réglé quoi que ce soit par le module de tableau de bord.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top