如何在Magento的父母中正确显示子块?

时间:2013-03-05 21:11:03

标签: php magento templates

我有以下内容:

那个local.xml

<?xml version="1.0" encoding="UTF-8"?>
<layout>

    <default>

        <reference name="root">
            <block type="core/text_list" name="foo" as="foo" translate="label">
                <label>Foo</label>
            </block>
        </reference>

        <reference name="foo">
            <block type="core/template" name="fooblock" template="foo.phtml" />
        </reference>

        <reference name="bar">
            <block type="core/template" name="barblock" template="bar.phtml" />
        </reference>

        <reference name="foo">
            <action method="insert">
                <name>barblock</name>
            </action>
        </reference>

    </default>

</layout>

foo.phtml

<div>
<h1 style="background-color:yellow">Hello New Reference!</h1>
<div><?php echo $this->getChildHtml() ?></div>
</div>

bar.phtml

<h1 style="background-color:yellow">Hello New Reference child!</h1>

1column.phtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>">
<head>
<?php echo $this->getChildHtml('head') ?>
</head>
<body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
<?php echo $this->getChildHtml('after_body_start') ?>
<div class="wrapper">
    <?php echo $this->getChildHtml('global_notices') ?>
    <div class="page">
        <?php echo $this->getChildHtml('header') ?>
        <?php echo $this->getChildHtml('global_messages') ?>
        <?php echo $this->getChildHtml('breadcrumbsContainer') ?>
        <div class="main col1-layout">
            <div class="col-main">
                <h1>Custom package, Primary theme</h1>
                <?php echo $this->getChildHtml('content') ?>
            </div>
        </div>
        <?php echo $this->getChildHtml('footer_before') ?>
        <?php echo $this->getChildHtml('footer') ?>
        <?php echo $this->getChildHtml('before_body_end') ?>
    </div>
</div>
<?php echo $this->getChildHtml('foo') ?>
<?php echo $this->getAbsoluteFooter() ?>
</body>
</html>

这显示如下(截至屏幕截图底部):

http://i.stack.imgur.com/BC9bf.png

如何让屏幕截图中列出的“子块”实际上成为第一个中的子块?

1 个答案:

答案 0 :(得分:1)

您使用<reference name="bar">,但您的布局中没有名称为“bar”的区块。你想在“fooblock”中定义“barblock”:

<?xml version="1.0" encoding="UTF-8"?>
<layout>

    <default>

        <reference name="root">
            <block type="core/text_list" name="foo" as="foo" translate="label">
                <label>Foo</label>
            </block>
        </reference>

        <reference name="foo">
            <block type="core/template" name="fooblock" template="foo.phtml" />
        </reference>

        <reference name="fooblock">
            <block type="core/template" name="barblock" template="bar.phtml" />
        </reference>

    </default>

</layout>