Unterschied zwischen hook_page_alter und preprocess_page?


10

Ich verstehe nicht ganz, wann ich hook_page_alter (& $ page) oder template_preprocess_page (& $ vars, $ hook) in Drupal 7 verwenden soll.

Was sind die Best Practices dafür in template.php?

Vielen Dank

Antworten:


16

Der Unterschied ist ihr Zweck.

hook_page_build () und hook_page_alter () werden verwendet, um Elemente auf Seitenebene zu entfernen, zu ändern oder hinzuzufügen.
Das übergebene $ page-Array hook_page_alter()enthält die Elemente der obersten Ebene für jeden Blockbereich. Standardmäßig sind dies die folgenden:

  • Seitenanfang
  • Header
  • sidebar_first
  • Inhalt
  • sidebar_second
  • page_bottom

Ein Beispiel für die Implementierung könnte das folgende sein:

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

Die Vorverarbeitungsfunktionen werden aufgerufen, um die Variablen zu ändern, die an die Vorlagendatei übergeben werden. Sie können die Struktur der Seite nicht ändern, aber sie können den Inhalt einiger Elemente der Seite ändern, indem sie den Inhalt dieser Variablen ändern.
Das Überlagerungsmodul entfernt beispielsweise die primären Registerkarten, wenn die zu visualisierende Seite die Überlagerung ist.

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

1
Aber mit hook preprocess_page kann ich die Seitenstruktur ändern, indem ich Dinge in $ vars ['page'] ändere. Ich benutze das, weil ich es schwer hatte, die nid mit hook_page_alter für die Knotenseite zu bekommen.
Gagarine

2
Sie können nid für eine Knotenseite mit menu_get_object ()
andrewmacpherson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.