GetChildHtml ve getBlockHtml arasındaki fark nedir


11

özet

  • Arasındaki fark nedir getChildHtmlve getBlockHtml?
  • Şablonda cms / block başlığını nasıl alabilirim?

Ben aslında kendi altbilgi ile Altbilgiyi yerini ve kendi ayarlamış <?= $this->getChildHtml('...') ?>kullandığım kadar bu işi vermedi: <?= $this->getBlockHtml('...') ?>.

Düzen XML'si:

<layout>
    <default>
        <block type="core/template" name="custom_footer" as="footer" template="page/html/footer.phtml">
            <block type="cms/block" name="child_1">
                <action method="setBlockId"><block_id>footer_child_1</block_id></action>
            </block>
         </block>
    </layout>
</default>

Şablon (çalışmıyor):

<footer>
    <div class="row">
        <div class="col-sp4"><?= $this->getChildHtml('child_1') ?></div>
    </div>
</footer>

Şablon (İşler):

<footer>
    <div class="row">
        <div class="col-sp4"><?= $this->getBlockHtml('child_1') ?></div>
    </div>
</footer>

Çözüm:

Her şeyden önce benim local.xmltarafından altbilgiyi geçersiz kılmak zorunda kaldı :

<default>
    <block type="core/template" template="page/html/custom_footer.phtml" name ="custom_footer" as "footer" />
</default>

Çocuklarımı eklemek zorunda kaldım ( getChildHtml()çalışmak için):

<reference name="footer">
    <block type="cms/block" name="child_1">
         <action method="setBlockId"><block_id>footer_child_1</block_id></action>
    </block>
</reference>

Yanıtlar:


27

getBlockHtml('block_name_here')block_name_hereEğer herhangi bir düzende bulursa adıyla bloğun html'si olsun ... her yerde. sadece o blok mevcut bloğun alt öğesiyse,
getChildHtml('block_name_here')ismiyle birlikte bloğun html'sini alırsınız block_name_here.

İşte bir örnek. Bir sonraki düzen bölümünü düşünün

<block type="core/template" template="some_template.phtml" name="some_name" />
<block type="core/template" template="some_other_template.phtml" name="some_other_name" />

Şimdi some_template.phtmlbu kod satırını eklerseniz şablon dosyasında <?php echo $this->getBlockHtml('some_other_name')?>blok için html alırsınız some_other_name.
Eğer eklerseniz <?php echo $this->getChildHtml('some_other_name')?>hiçbir şey elde edemezsiniz.

Aşağıdaki senaryoda

<block type="core/template" template="some_template.phtml" name="some_name">
    <block type="core/template" template="some_other_template.phtml" name="some_other_name" />
</block>

getChildHtmlve getBlockHtmlsize aynı şeyi getirecek. bloğun html'si some_other_name.


Teşekkürler - Öyleyse güncellenmiş sorumda: bloğun <block type="cms/block" name="child_1">bir çocuğu olduğunu düşünmekte haklı footermıyım? Bu durumda `` getChildHtml ('child_1') neden çalışmıyor?
kül

@Kül. Ben senin durumunda düşünüyorum getChildHtmldüzen sayfası (örneğin 3columns.phtml) hala block.I footer varsayılan vermektedir çünkü işi değil sahip olduğu anlamına <?php echo $this->getChildHtml('footer') ?>onun içinde. Haklı mıyım? Burada karanlıkta çekim yapıyorum çünkü mizanpaj sayfanızın nasıl göründüğünü bilmiyorum, ama ilk kontrol ettiğim şey bu. Bunu değiştirmeyi deneyin <?php echo $this->getChildHtml('custom_footer') ?>ve kullanıp kullanamayacağınızı görün getChildHtml.
Marius

Bence haklısın; Çalıştığı eski altbilgi bloğunun üzerine yazdım - Asıl sorun Magento ile ilgili olmasa da. Cevabınız varsayımlarımı siler - teşekkürler d00d :)
kül
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.