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ırmaGeliştirmePerformans 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.