it-swarm-es.com

¿Es posible que un módulo sepa cuándo se está emitiendo uno de sus bloques en el tablero, y cambie el contenido de ese bloque?

Drupal 7 tiene un nuevo módulo de núcleo (Dashboard.module) que permite a los usuarios los permisos correctos agregar bloques definidos desde sitios de terceros al tablero, que se muestra como superposición en la página actual.

¿Es posible que un módulo lo que implemente bloques sepa cuándo se está prestando el bloque en el tablero?
La idea sería cambiar el contenido del bloque y hacerlo más pequeño (por ejemplo).

1
kiamlaluno

Mirando el código de Dashboard.module, encontré la siguiente función:

/**
 * 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 () es la función que devuelve TRUE cuando el panel de control es visible, y Dashboard_Regions () es la función que devuelve una matriz que contiene la lista de la lista de la lista de Regiones contenidas en el tablero de instrumentos.

Esas son las funciones que permiten un módulo saber cuándo se están prestando sus bloques en el panel de control. El único problema es que el módulo sepa a qué región se asocian sus bloques, ya que el objeto de bloque no se pasa al hook_block_view () . Drupal 7 usa ganchos nuevos, hook_block_view_alter () y gook_block_view_module_delta_alter () , cuyo segundo parámetro es el objeto de bloqueo. Implementando uno de estos ganchos es posible alterar el bloqueo que se basa en el hecho de que el bloque se está prestando en el tablero de instrumentos, o no.

Suponiendo que mymodule es el nombre corto del módulo, y test_block es el valor Delta, el módulo debe usar la siguiente función:

/**
 * 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.
  }
}
2
kiamlaluno

Puede verificar el argumento de la URL en el que se muestra el bloque y luego, si coincide con un patrón esperado, es decir, el tablero de instrumentos, puede alterar el contenido del bloque. Esta solución solo funciona realmente si ha codificado el bloque usted mismo.

Actualización: este método seguirá funcionando, aunque no estoy lo suficientemente familiar drupal 7s Módulo de panel de control para comentar más. Lo único que sugeriría es generar variables de la página y ver si hay algo establecido por módulo del panel de control.

2
digital