Bir modül ile Drupal * _preprocess

2 Cevap php

Ben Drupal dev yeniyim, ve benim modülün önişlemci fonksiyonu için varolan bir bölge değişkeni eklemek için çalışıyordu.

Temelde, benim site için yeni bir bölge (. Burada tarafında benim temanın bilgi dosyası içinde tanım budur) yarattık:

regions[feeds] = Feeds

Yönet-> Bloklar, ben yeni "Feeds bölge" Ben istiyorum blokları ekledik.

Sonra, başka bir modülde, "Gelişmiş Ön Sayfa" modülü, bu modül içinde benim "ön sayfasına" bazı PHP eklemek çalışıyorum. Gelişmiş Ön Sayfa modülü sadece yerine hemen vb diğer site içeriğinin bir listesini görüntüleme, site açılış sayfası olmasını sağlar ben içerik alanı için PHP etkin ve daha sonra aşağıdaki ekledim:

<div>
    <?php print $feeds; ?>
</div>

Bu bölgeyi "Besleme" yazmıyor ve ben o bölge değişken page.tpl.php dosyasının dışında erişilebilir değil çünkü inanıyorum. Yani etrafına baktıktan sonra, ben bu bağlantıların üzerine geldi:

http://drupal.org/node/223430

http://drupal.org/node/237391

Oradan, "front_page" bir modül adı vardır modülü "Gelişmiş Ön Sayfa", bir Önişlemci işlev eklemek için çalıştı (ya da muhtemelen sadece "ön", ben% 100 emin değilim). İşte benim önişlemci fonksiyonu hem benim template.php dosyasına eklemek için çalıştı,, ve / modules / ön / front_page.module dosyası (değil aynı zamanda, zihin):

function front_preprocess(&$vars)
{
 $vars['feeds'] = theme('blocks', 'feeds');
}

Ne olursa olsun ben bu dosyayı (template.php veya front_page.module) koydum nerede bir şey yapmak için görünmüyor. Ben yanlış gidiyor olabilir herhangi bir fikir?

2 Cevap

Ben gelişmiş ön sayfa modülünü denemedim, ancak bölgeler ile uğraşırken, sen ne yaptın yapmamalısınız. Biraz hacky ve aslında gerekli değil. Ben çiftleşmiş sistemi içine nasıl modül kanca bilmiyorum, ama bu kapsam bulunuyor halinde sorun muhtemelen bölge değişkenleri oluyor. Ama bunun yerine modülünü kullanarak frontpage içine bölgeyi almaya çalışırken, yerine page.tpl.php içine almalısınız. Aslında ilk denedim ne yapabilirim, ama ben bunu böyle biraz değiştirmek öneririm:

<?php if ($feeds): ?>
<div id="feeds">
    <?php print $feeds; ?>
</div>
<?php endif; ?>

İki şekilde iyileştirilmiştir.

  1. Eğer deyimi ekleyerek, boş biçimlendirme eklemek gerekmez. $ Şey içermiyorsa beslemeleri Yani eğer alışkanlık boş bir div olsun.
  2. Bölgelere id eklemek iyi bir fikirdir. Onları ya da içeriği çok daha kolay şekillendirme yapar, ayrıca bu konuda her hangi html sayfanızda semantik ekler.

Eğer sadece blok ön sayfada gösterilmesini istiyorsanız Şimdi bloklar ayarlarının her biri bu kadar ayarlayabilirsiniz. Eğer bloklar mevcut bir bölgenin dışındaki bir görüntülemek istediğiniz sürece Yani muhtemelen sadece, zaten varolan bir bölgeyi kullanabilirsiniz. Bölgeleri eklerken yerine o içeriği gösterilmesi gerektiğini geldiğinde kontrol etmek çok daha iyi, sadece tek bir sayfa için bir bölge eklemek için iyi bir uygulama değil. Bu yeni bir bölge oluşturmak gerekmez, ama sadece zaten yapılmış birini kullanabilirsiniz olabilir. Eğer ön sayfasında bazı şablon değişiklikler yapmak istiyorsanız Ayrıca, aynı zamanda bunu arzu eğer ön sayfa için farklı bir şablon düzeni oluşturabilirsiniz ön page.tpl.php oluşturabilirsiniz.

Sorunuzu gidermek için birkaç nokta vardır:

  1. Ben ikinci googletorps farklı bir şekilde bu yaklaşım gerektiğini cevap istiyorum.
  2. *_preprocess fonksiyonlar sadece, örneğin, şablonlar veya tema işlevleri için değişkenler enjekte / işlemek için kullanılabilir page.tpl.php, node.tpl.php, theme_links(), vb front_page modülü tema işlevi veya çıkışını render (özel) şablonu kullanmaz gibi, $ besleme değişken yapamaz Orada bir *_preprocess fonksiyonu vasıtasıyla.
  3. Sidenote: *_preprocess işlevleri ile, adlandırma çok önemlidir. Sen bunu beyan yere bağlı olarak, ya tam modül adı veya tema adı ile fonksiyon adı öneki gerekir. Eğer modülüne preprocess işlev eklemek istiyorsanız Yani örnekte, size {size temalar eklerseniz template.php, eklemek istiyorum, 'front_page_' ile öneki ederim [(2 )]}.
  4. Sen could sizin frontpage içerik alanında doğrudan kodundan bloklar oluşturarak istediğinizi elde. Bunun yerine çıkışına (mevcut değil) $ besleme değişken çalışırken, sen diyebiliriz:

    tema ('blok', 'beslemeleri')

    Bu Drupal (bu durumda 'beslemeler') Belirli bir bölge için temalı blokları dönmesine neden olur. Eğer page.tpl.php olarak bölge kullanmak bile bu, yine de bunu yapmak için iyi bir yol olmadığını unutmayın, bu yine de sitenize yapılan her sayfa isteği oluşturulan alır!

Yani diğer kullanımları da bunun için vardır yalnızca yeni bir bölge ekleyerek, googletorps öneri ile gitmek istiyorum. Ben sadece frontpage için bazı bloklar eklemek isteseydim, ben yeni bir bölge oluşturmak, ancak içerik bölgedeki göstermek için blokları yapılandırmak ve sadece kendi görüş sadece <front> göstermek için onları kısıtlamak olmaz ayarlar.