布局更新:无法通过引用在布局XML中添加子块


8

我遇到了似乎无法在布局XML文件中添加子块的问题。mylayout.xml无法加载,这是我做错了abc什么?我有以下文件。

onestepcheckout.xml

<onestepcheckout_index_index>
    ...
    <reference name="content">
        <block type="onestepcheckout/checkout" name="onestepcheckout.checkout" template="onestepcheckout/checkout.phtml">
            ...
            <!-- this child block can be loaded -->
             <block type="block/class" template="path/to/template/template.phtml" name="qwe" as="qwe" />
            ...
        </block>
    </reference>
    ...
</onestepcheckout_index_index>

mylayout.xml

<onestepcheckout_index_index>
    <reference name="onestepcheckout.checkout">
        <!-- this child block can not be loaded -->
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
    </reference>
</onestepcheckout_index_index>

checkout.phtml

...
<?php echo $this->getChildHtml('abc') // doesn't work ?>
<?php echo $this->getChildHtml('qwer') // works ?>
...

Answers:


8

如果是模块加载问题,我认为您应该在模块声明文件中添加一个标记。像下面

<depends> <companyname_modulename/> </depends>

这将确保您的模块将在companyname_modulename之后加载


4

我找出原因了。我的扩展程序首先加载,而加载onestepcheckout_index_index的扩展程序在我的扩展程序之后加载。因此,我的布局更新引用的是尚不存在的句柄。


4

只是为了澄清这一点。几个步骤是必要的。首先,将块声明为子块。

<action method="setChild"><alias>my_name</alias><child>my.name</child></action>

然后将依赖项添加到模块声明文件中。就我而言Idev_OneStepCheckout

<depends>
    <Idev_OneStepCheckout />
</depends>

最后,在模板中,仅当您使用别名时,它才有效。

echo $this->getChildHtml('my_name')

2

不知道为什么这也不起作用。您是否尝试过明确声明该块为儿童?

<onestepcheckout_index_index>
    <reference name="onestepcheckout.checkout">
        <!-- this child block can not be loaded -->
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
        <action method="setChild"><child>abc</child><alias>abc</alias></action>
    </reference>
</onestepcheckout_index_index>

我试过了,但是还是不行。奇怪的是,我还有其他my layout.xml使用相同方法的更新,它们都可以工作。
musicliftsme 2014年

1
我找出原因了。我的扩展程序先加载,然后加载我的扩展程序onestepcheckout_index_index。因此,我的布局更新指的是尚不存在的手柄
。.– musicliftsme 2014年

@laketuna很有意思,我最近有一个类似的问题,只是使用了一个观察器,但是这个问题再次激发了我的好奇心,谢谢
pzirkind 2014年

1

如果要添加新块,则应引用结构块,而不是内容块。试试这样的事情:

<onestepcheckout_index_index>
    <reference name="content">
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
    </reference>
</onestepcheckout_index_index>

1
引用content加载了我的代码块,但是如果我引用`content,我将无法控制该代码块的放置位置。
musicliftsme 2014年

它由<?php echo $this->getChildHtml('abc') ?>
Pronto

我需要将此块放置在特定位置。据我所知,引用会content自动放置该块,echo $this->getChildHtml('abc')并且没有任何效果。如我错了请纠正我。
musicliftsme 2014年
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.