È possibile per un modulo di sapere quando uno dei suoi blocchi è essere uscita sul cruscotto, e modificare il contenuto di quel blocco?
Domanda
Drupal 7 ha un nuovo modulo di base (dashboard.module) che consente agli utenti con i permessi giusti per aggiungere blocchi definiti da siti di terze parti per il cruscotto, che viene visualizzato come overlay nella pagina corrente.
E 'possibile per un modulo che implementa i blocchi per sapere quando il blocco viene eseguito il rendering sul cruscotto?
L'idea sarebbe quella di modificare il contenuto del blocco, e renderlo più piccolo (per esempio).
Soluzione 2
Guardando il codice di dashboard.module, ho trovato la seguente funzione:
/**
* 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 () è la funzione che restituisce TRUE
quando il cruscotto è visibile, e dashboard_regions () è la funzione che restituisce una matrice contenente l'elenco delle regioni contenute nel cruscotto.
Queste sono le funzioni che permette ad un modulo per sapere quando i suoi blocchi sono stati resi nel cruscotto. L'unico problema si riferisce al modulo conoscere il tipo di regione suoi blocchi sono associati, come l'oggetto blocco non viene passato al hook_block_view () . Drupal 7 usi nuovi ganci, hook_block_view_alter () e hook_block_view_MODULE_DELTA_alter () , il cui secondo parametro è l'oggetto blocco. uno attuazione di questi ganci è possibile alterare la basandosi blocco sul fatto blocco viene reso nel cruscotto, oppure no.
Supponendo che mymodule
è il nome breve modulo e test_block
è il valore delta, il modulo dovrebbe utilizzare la seguente funzione:
/**
* 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.
}
}
Altri suggerimenti
Si potrebbe verificare l'argomento url che il blocco viene visualizzato su e poi se corrisponde uno schema previsto vale a dire / dashboard quindi è possibile modificare il contenuto del blocco. Questa soluzione funziona davvero solo se hai codificato il blocco da soli.
Aggiornamento: Questo metodo continua a funzionare, anche se io non sono a conoscenza del modulo plancia abbastanza Drupal 7s di commentare ulteriormente. L'unica cosa che vorrei suggerire è quello di variabili di pagina in uscita e vedere se c'è qualche cosa insieme dal modulo cruscotto.