Magento的故事及其XML布局

时间:2015-09-29 08:54:35

标签: php magento

曾几何时,在Magento 1.9.1布局XML文件中......

    <!-- THIS ADDS A BANNER: -->
    <reference name="content">
        <block type="cms/block" name="blog_banner1">
            <action method="setBlockId"><block_id>blog_banner</block_id></action>
        </block>
    </reference>

    <!-- ...BUT NONE OF THESE ADD ANY BANNERS: -->
    <reference name="above_main">
        <block type="cms/block" name="blog_banner2">
            <action method="setBlockId"><block_id>blog_banner</block_id></action>
        </block>
    </reference>
    <reference name="breadcrumbs">
        <block type="cms/block" name="blog_banner3">
            <action method="setBlockId"><block_id>blog_banner</block_id></action>
        </block>
    </reference>
    <reference name="global_messages">
        <block type="cms/block" name="blog_banner4">
            <action method="setBlockId"><block_id>blog_banner</block_id></action>
        </block>
    </reference>
    <!-- if adding a banner to "above_main" would work that would be nice... :( -->

...在一页,远,远(2columns-left.phtml)......

<body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
<?php echo $this->getChildHtml('after_body_start') ?>

<?php echo $this->getChildHtml('right_panel') ?>
<div class="wrapper">
    <?php echo $this->getChildHtml('global_notices') ?>
    <div class="page container">
        <?php echo $this->getChildHtml('header') ?>
        <div class="container body-wrapper">
            <?php echo $this->getChildHtml('global_messages') ?>
            <?php echo $this->getChildHtml('breadcrumbs') ?>
            <?php echo $this->getChildHtml('above_main') ?>
            <div class="row">
                <div class="sidebar col-sm-3"><?php echo $this->getChildHtml('left') ?></div>
                <div class="col-sm-9">
                    <?php echo $this->getChildHtml('content') ?>
                </div>
            </div>
        </div>
        <?php echo $this->getChildHtml('footer') ?>
        <?php echo $this->getChildHtml('global_cookie_notice') ?>
        <?php echo $this->getChildHtml('before_body_end') ?>
    </div>
</div>
<?php echo $this->getAbsoluteFooter() ?>
</body>

相同布局规则的神秘之处在于content,而不是above_mainbreadcrumbsglobal_messages

任何人都可以对此有所了解,以便我能过上幸福的生活吗?

1 个答案:

答案 0 :(得分:2)

您的所有块都具有相同的名称,您不能在同一页面上具有多个具有相同名称的块元素,它将忽略重复项。将名称更改为

name="blog_banner_1"
name="blog_banner_2"
等等,力量很大。

另外,请确保在page.xml中定义了above_main块。在&#39;默认&#39; page.xml的块,找到;

 <block type="core/text_list" name="right" as="right" translate="label">
            <label>Right Column</label>
        </block>

然后立即添加;

<block type="core/text_list" name="above_main" as="above_main"/>

现在您已经创建了页面引用above_main,所以希望您能够将块添加到它。

您无法添加参考&#39;面包屑的原因&#39;当你查看page.xml时也很清楚 -

<block type="core/text_list" name="breadcrumbs.container" as="breadcrumbsContainer" translate="label">
            <label>Breadcrumbs</label>
            <block type="page/html_breadcrumbs" name="breadcrumbs"/>
        </block>

只有#34; core / text_list&#34;在被称为块引用时将呈现子项 - 所以所有引用=&#34; blah&#34;在你的自定义XML中必须引用core / text_list类型的包含块 - 在breadcrumb exmaple中,它应该是;

<reference name="breadcrumbs.container">
<block type="cms/block" name="blog_banner2">
        <action method="setBlockId"><block_id>blog_banner</block_id></action>
    </block>
</reference>

现在看一下global_messages;

<block type="core/messages" name="global_messages" as="global_messages"/>

这不能用作添加子项的容器引用,因为它永远不会呈现它们。