Html.tpl.php içinde bölgeleri yazdırma


10

Bu sayfa.tpl.php ve sayfa-front.tpl.php (sadece iki isim için) arasında değişmez çünkü html.tpl.php şablonundaki bazı bölgeleri çıktı gerekiyor. Temelde kod çoğaltma önlemek istiyorum.

Ancak html.tpl.php bölgeleri ile ilişkili bir şey yok gibi görünüyor, ne de drupal_get_region_content (her ikisi de ve parametreleri olmadan sadece boş bir dizi döndürür) kullanarak bir şey alabilir.

Fikirler?


drupal_set_region_content()Bölge içeriğini ayarlamak için kullandınız mı?
kiamlaluno

2
Böyle bir işlev yok. Belki demek istedin drupal_add_region_content()ama içinde bir nokta görmüyorum: Bölgelerin içeriğini blok yönetici arayüzü üzerinden ayarladım.
Morpheu5

1
Evet, demek istedim drupal_add_region_content().
kiamlaluno

Yanıtlar:


18

Ben böyle çözdüm:

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

ve sonra yapabilirdim

<?php print render($region_name) ?>

Neden echo kullanılır? Tabii ki işe yarıyor.
SDMulroy

Elbette, bir modül ya da genel tema uygulasaydım, topluluk standartlarına uymaya zorlanırdım. Bu, yalnızca müvekkilim tarafından kullanılan özel bir temaydı.
Morpheu5

Bunun son derece eski bir yazı olduğunu biliyorum, ancak bence cevap yazarı soruya tembelce cevap verdiği bir cevabı kabul etmek kötü bir karardır. Örneğin, eklemek için bir işlev sağlarsınız, ancak tüm okuyucuların bu kodun nerede yaşaması gerektiğini sihirli bir şekilde bileceğini varsayın. Bu tembel kısmı ve acemi drupal kullanıcılara / devs için hiçbir şey sağlamadığı için bunu aşağı oyluyorum.
Skittles

Verdiğiniz katkıları ve acemilerin tam bir açıklama almıyor olabileceğini takdir ediyorum. Bununla birlikte, a) kaşıkla beslemenin tembel acemiler yaptığını ve b) belgeleri hızlıca okuyan (tembel olmayan acemilerin olması gerektiği gibi) birine bu işlevin yerleşiminin nispeten açık olması gerektiğini lütfen unutmayın. Değilse, iyi bir nedenden dolayı bir kılavuz vardır. Sorum (ve cevabım), Drupal teması hakkında belirli bir temel bilginin kabul edilebileceği düzeyde bir konuyu ele alıyor. Dahası, bu bir Soru-Cevap sitesi, Dokümanlar sitesi yandaki.
Morpheu5

1
@Skitties Yeni kullanıcıların soruda gösterilenler gibi önişlem işlevlerinin ne olduğunu bilmedikleri için burada belgeleri çoğaltamıyoruz. Bu sorunun bir parçası bile değil. Kullanıcıların önişleme işlevlerini aşmak için belirli bir soruları varsa, yeni bir soru sorarlar.
kiamlaluno

2

drupal_get_region_content(), daha önce yapılan çağrılarla ayarlanan içeriği döndürür drupal_add_region_content(), ancak sayfada block_page_build () aracılığıyla oluşturulan blokların içeriğini içermez .

Drupal kaynak kodunda "drupal_add_region_content" için arama yaparsanız, işlevin çağrıldığını göreceksiniz:

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

Yönetim sayfasındaki bloklar için belirlediğiniz, blokların hangi bölgelerde oluşturulacağı, ancak içeriğinin eklenmediği drupal_add_region_content(); aslında, yukarıda listelenen işlevlerden hiçbiri ( drupal_add_region_content()Drupal kurulumunu test etme kodu hariç, çağrılan tek işlevdir ) blok içeriğini oluşturmak / eklemek için değildir.

Blokları kendi kodunuzda oluşturmanız gerekirse, kullanılan kodu kontrol etmelisiniz block_page_build(). Özellikle, bu muhtemelen sizin için daha yararlı olan koddur:

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

İlk iki satır, gösterilen sayfanın tema bölgelerinin nereye yerleştirildiğini göstermek için kullanılan demo sayfası olmadığını doğrular.

Blokları farklı bir şekilde oluşturmanız gerekiyorsa, temanızdaki theme_block () 'u geçersiz kılmak veya (hatta daha da büyük olasılıkla) özel bir block.tpl.php şablon dosyası oluşturmakla ilgilenmeniz daha olasıdır . Blokların oluşturulma şeklini değiştirmenin başka bir yolu, bloklar için bir önişleme işlevi kullanmaktır ( hook_preprocess_block () ).

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.