¿Es posible que un módulo para saber cuando uno de sus bloques hay salida en el salpicadero, y cambiar el contenido de ese bloque?

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

  •  16-10-2019
  •  | 
  •  

Pregunta

Drupal 7 tiene un nuevo módulo principal (dashboard.module) que permite a los usuarios con los permisos adecuados para añadir bloques definidos a partir de los sitios de terceros en el salpicadero, que se muestra como superposición en la página actual.

¿Es posible que un módulo que implementa bloques para saber cuando el bloque se está representando en el salpicadero?
La idea sería cambiar el contenido del bloque, y hacerlo más pequeño (por ejemplo).

¿Fue útil?

Solución 2

Si examina el código de dashboard.module, me encontré con 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 tablero está visible, y dashboard_regions () es la función que devuelve una matriz que contiene la lista de las regiones contenidas en el tablero de instrumentos.

Estas son las funciones que permiten a un módulo de saber cuándo sus bloques están siendo prestados en el tablero de instrumentos. El único problema es para el módulo de saber a qué región sus bloques están asociados, como el objeto de bloque, no se pasa a la hook_block_view () . Drupal 7 usos nuevos ganchos, hook_block_view_alter () y hook_block_view_MODULE_DELTA_alter () , cuyo parámetro segundo es el objeto de bloque. uno Implementación de estos ganchos es posible alterar la basándose bloque en el hecho del bloque está siendo generado en el salpicadero, o no.

Suponiendo que mymodule es el nombre abreviado del módulo, y test_block es el valor delta, el módulo debe utilizar 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.
  }
}

Otros consejos

Usted puede comprobar el argumento url que el bloque se muestra y luego si coincide con un patrón esperado es decir / tablero entonces se puede alterar el contenido de la manzana. Esta solución sólo funciona si se ha codificado el bloque de ti mismo.

Actualización: Este método seguirá funcionando, aunque no estoy lo suficientemente familiarizado Drupal 7s módulo salpicadero hacer más comentarios. La única cosa que sugeriría es que las variables de resultados de página y ver si hay algo conjunto por el módulo salpicadero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a drupal.stackexchange
scroll top