getChildHtml和getBlockHtml有什么区别


11

概要

  • getChildHtml和之间有什么区别getBlockHtml
  • 如何在模板中获取cms / block标题?

实际上,我已经用自己的页脚替换了页脚,并设置了自己的页脚。<?= $this->getChildHtml('...') ?>直到我使用了,该方法才起作用<?= $this->getBlockHtml('...') ?>

布局XML:

<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>

模板(无效):

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

范本(作品):

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

解:

首先,我必须通过以下方法覆盖页脚中的页脚local.xml

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

我必须添加我的孩子(以便getChildHtml()工作):

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

Answers:


27

getBlockHtml('block_name_here')block_name_here如果它在布局中...随处可见,则为您提供具有名称的块的html 。仅当该块是当前块的子代时,才
getChildHtml('block_name_here')获取具有名称的块的html block_name_here

这是一个例子。考虑下一个布局部分

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

现在,在模板文件中,some_template.phtml如果添加此行代码,<?php echo $this->getBlockHtml('some_other_name')?>您将获得该块的html some_other_name
如果添加,<?php echo $this->getChildHtml('some_other_name')?>您将一无所获。

在以下情况下

<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>

getChildHtml并且getBlockHtml将让你同样的事情。块的html some_other_name


谢谢-我在更新的问题中认为:这<block type="cms/block" name="child_1">是孩子footer吗?在哪种情况下,为什么getChildHtml('child_1')不起作用?
2014年

@灰。我认为在您的情况下这getChildHtml是行不通的,因为布局页面(例如3columns.phtml)仍然呈现默认的页脚块<?php echo $this->getChildHtml('footer') ?>。我对吗?我在黑暗中拍摄是因为我不知道布局页面的样子,但这是我要检查的第一件事。尝试将其更改为<?php echo $this->getChildHtml('custom_footer') ?>,看看是否可以使用getChildHtml
马里乌斯

我想你是正确的; 我改写了正在起作用的旧页脚块-尽管实际问题与Magento无关。您的回答清除了我的假设-谢谢d00d :)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.