web-dev-qa-db-fra.com

Différence entre hook_page_alter et preprocess_page?

Je ne comprends pas complètement quand je dois utiliser hook_page_alter (& $ page) ou template_preprocess_page (& $ vars, $ hook) dans Drupal 7.

Quelles sont les meilleures pratiques à ce sujet à utiliser dans template.php?

Merci

10
gagarine

La différence est leur objectif.

hook_page_build () et hook_page_alter () sont utilisés pour supprimer, modifier ou ajouter des éléments au niveau de la page.
Le tableau $ page passé à hook_page_alter() contient les éléments de niveau supérieur pour chaque région de bloc. Par défaut, ce sont les suivants:

  • page_top
  • entête
  • sidebar_first
  • contenu
  • sidebar_second
  • page_bottom

Un exemple de mise en œuvre pourrait être le suivant:

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.'),
  );
}

Les fonctions de prétraitement sont appelées pour modifier les variables transmises au fichier modèle. Ils ne peuvent pas modifier la structure de la page, mais ils peuvent modifier le contenu de certains éléments de la page en modifiant le contenu de ces variables.
Par exemple, le module Incrustation supprime les onglets principaux lorsque la page visualisée est l'incrustation.

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