Bölgeler bir düğüm şablonunda yazdırılabilir mi?


25

Bölgeler bir düğüm şablonunda yazdırılabilir mi, yoksa bölgeler kesinlikle sayfa şablonlarıyla sınırlı mı?

Yanıtlar:


48

Herhangi bir şablonun içindeki bölgeleri yazdırabilirsiniz, ancak şablondaki kutudan kullanılamazlar node.tpl.php. Bunları kullanılabilir yapmak için, node.tpl.phpşablonunuzda kullanmak üzere tüm bölge içeriğini içerecek yeni bir değişken oluşturacaksınız .

Yeni şablon değişkenleri oluşturmak bir ön işleme fonksiyonu kullanılarak yapılır. Temanızın template.phpdosyasında şuna benzeyen bir işlev oluşturun:

function mytheme_preprocess_node(&$variables) {
}

mythemeTemanızın kısa adı ile değiştiriliyor . Şimdi, Drupal'ın bu yeni önişleme işlevini tanıması için sitenizin tema kayıt defterini yeniden oluşturmanız gerekir. Bu, Yapılandırma → Geliştirme → Performans seçeneğine gidip üst kısımdaki "Tüm önbellekleri temizle" düğmesine basmak kadar basittir .

Şimdi, ön işleme işlevlerinin çalışma şekli, $variablesşablonunuzun kullanılabilir değişkenlerine karşılık gelen bir dizi içerir. Örneğin, node.tpl.php, $submittedyazar yazar bilgisi içerir. Yukarıdaki ön işleme işlevinde, içinde bulunur $variables['submitted'].

İçinde bulunduğunuz şeyleri taklit etmek için, tüm bölgeleri içeren page.tpl.phpbir dizilimin bulunduğu $pageyerleri doldurmak istersiniz $variables['page'].

Sorun olduğunu $pageiçinde node.tpl.phpzaten sen kendi başına veya bir girişte düğüm bakıyoruz olmadığını bildiren bir doğru / yanlış değeri ile doldurulur.

Bu nedenle, bu isim çarpışmasını önlemek için, $regionyerine yerleştirin:

function mytheme_preprocess_node(&$variables) {

  // Get a list of all the regions for this theme
  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {

    // Get the content for each region and add it to the $region variable
    if ($blocks = block_get_blocks_by_region($region_key)) {
      $variables['region'][$region_key] = $blocks;
    }
    else {
      $variables['region'][$region_key] = array();
    }
  }
}

Ardından, temanızın node.tpl.phpşablonunda, aşağıdakileri yaparak herhangi bir bölgeyi oluşturabilirsiniz:

<?php print render($region['sidebar_first']); ?>

sidebar_firstOluşturmak istediğiniz bölgenin adı nerede .


1
Sonunda Drupal 7 için çalışan bir çözüm :)
— Eduard Luca

4
Ayrıca benim için işe yarayan hızlı bir 'n' kirli çözümü var <?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>. Buradan: webomelette.com/add-region-node-template
— Darragh Enright

Bu çözüm çok şık. Sayfa.tpl.php içinde yer almak yerine node.tpl.php içindeki bölgelerin yazdırılmasının en uygun olduğu zamana ilişkin örnekler verebilir misiniz?
— Randell

Bu, tasarımınıza bağlıdır. Bazen düzen, kenar çubuğunu, bunun yerine düğüm div'sinin içindeyse temanın daha kolay olduğu bir yere koyabilir.
— Rooby

Uygun bölge sarmalayıcılarını unutmayın! Referans için system_page_alter () bölümüne bakın . Bunun block_get_blocks_by_region()yalnızca blok dizisini döndürdüğünü ve bir bölge olarak oluşturmak istediğinizde bölge sarmalayıcı eklemeniz gerektiğini unutmayın.
— SiliconMind
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.