È possibile per un modulo di sapere quando uno dei suoi blocchi è essere uscita sul cruscotto, e modificare il contenuto di quel blocco?

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

  •  16-10-2019
  •  | 
  •  

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).

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top