Differenza tra hook_page_alter e preprocess_page?


10

Non capisco completamente quando dovrei usare hook_page_alter (& $ page) o template_preprocess_page (& $ vars, $ hook) in Drupal 7.

Quali sono le migliori pratiche da utilizzare in template.php?

Grazie

Risposte:


16

La differenza è il loro scopo.

hook_page_build () e hook_page_alter () sono usati per rimuovere, alterare o aggiungere elementi a livello di pagina.
L'array $ page passato hook_page_alter()contiene gli elementi di livello superiore per ciascuna regione di blocco. Di default sono i seguenti:

  • page_top
  • intestazione
  • sidebar_first
  • soddisfare
  • sidebar_second
  • page_bottom

Un esempio di implementazione potrebbe essere il seguente:

function mymodule_page_alter(&$page) {
  // Add help text to the user login block.
  $page['sidebar_first']['user_login']['help'] = array(
    '#weight' => -10, 
    '#markup' => t('To post comments or add new content, you first have to log in.'),
  );
}

Le funzioni di preelaborazione vengono chiamate per modificare le variabili che vengono passate al file modello. Non possono cambiare la struttura della pagina, ma possono alterare il contenuto di alcuni elementi della pagina cambiando il contenuto di quelle variabili.
Ad esempio, il modulo Overlay rimuove le schede primarie quando la pagina visualizzata è l'overlay.

function overlay_preprocess_page(&$variables) {
  if (overlay_get_mode() == 'child') {
    unset($variables['tabs']['#primary']);
  }
}

1
Ma con hook preprocess_page posso cambiare la struttura della pagina cambiando roba all'interno di $ vars ['page']. Lo uso perché ho avuto difficoltà a ottenere il nid con hook_page_alter per la pagina del nodo.
gagarine,

2
Puoi ottenere nid per una pagina di nodo usando menu_get_object ()
andrewmacpherson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.