Hook_page_alter ve preprocess_page arasındaki fark nedir?


10

Drupal 7'de hook_page_alter (& $ sayfa) veya template_preprocess_page (& $ vars, $ hook) kullanmam gerektiğinde tam olarak anlamıyorum.

Template.php içinde kullanmak için bununla ilgili en iyi uygulamalar nelerdir?

Teşekkürler

Yanıtlar:


16

Fark, amaçlarıdır.

hook_page_build () ve hook_page_alter () , sayfa düzeyinde öğeleri kaldırmak, değiştirmek veya eklemek için kullanılır.
Geçirilen $ sayfa dizisi hook_page_alter(), her blok bölgesi için en üst düzey öğeleri içerir. Varsayılan olarak aşağıdakilerdir:

  • page_top
  • başlık
  • sidebar_first
  • içerik
  • sidebar_second
  • page_bottom

Uygulamaya bir örnek olarak şunlar verilebilir:

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

Şablon dosyasına iletilen değişkenleri değiştirmek için önişleme işlevleri çağrılır. Sayfanın yapısını değiştiremezler, ancak bu değişkenlerin içeriğini değiştirerek sayfanın bazı öğelerinin içeriğini değiştirebilirler.
Örneğin, Kaplama modülü, görüntülenen sayfa kaplama olduğunda birincil sekmeleri kaldırır.

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

1
Ancak kanca preprocess_page ile $ vars ['page'] içindeki şeyleri değiştirerek sayfa yapısını değiştirebilirim. Düğüm sayfası için hook_page_alter ile nid almak zor bir zaman vardı çünkü bunu kullanın.
Gagarine

2
Menu_get_object () kullanarak bir düğüm sayfası için nid alabilirsiniz
andrewmacpherson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.