Magento:几个自定义块都输出相同的代码!

时间:2010-01-25 05:27:01

标签: magento

我有一个自定义模块,它有几个块。如果我将这些块彼此包含在CMS页面中,它们将按预期工作。如果我通过布局XML文件包含它们,它们都会显示XML中调用的最后一个源代码。下面是一个最小测试用例(对我来说就是表现出这种行为),以及预期和实际结果。

代码

/app/etc/modules/Test_Tester.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Test_Tester>
            <active>true</active>
            <codePool>local</codePool>
        </Test_Tester>
    </modules>
</config>

/app/code/local/Test/Tester/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Test_Tester>
            <version>0.1.0</version>
        </Test_Tester>
    </modules>
    <global>
        <blocks>
            <test_tester>
                <class>Test_Tester_Block</class>
            </test_tester>
        </blocks>
    </global>
</config>

/app/code/local/Test/Tester/Block/One.php

<?php
class Test_Tester_Block_One extends Mage_Catalog_Block_Product_List_Upsell
{
    protected function _prepareData()
    {
echo 'One.php';

//...MORE code here, it's not really relevant though
    }
}

/app/code/local/Test/Tester/Block/Two.php

<?php
class Test_Tester_Block_Two extends Mage_Catalog_Block_Product_List_Upsell
{
    protected function _prepareData()
    {
echo 'Two.php';

//...MORE code here, it's not really relevant though
    }
}

/app/design/frontend/INTERFACE/TEMPLATE/layout/page.xml(在

..
<block type="core/text_list" name="testa" as="testa" />
<block type="core/text_list" name="testb" as="testb" />
..

/app/design/frontend/INTERFACE/TEMPLATE/layout/cms.xml(在

<reference name="testa">
  <block type="test_tester/one" template="tester/one.phtml"/>
</reference>
<reference name="testb">
  <block type="test_tester/two" template="tester/two.phtml"/>
</reference>

/app/design/frontend/INTERFACE/TEMPLATE/template/page/home_template.phtml

<?php echo $this->getChildHtml('testa'); ?>
<?php echo $this->getChildHtml('testb'); ?>

/app/design/frontend/INTERFACE/TEMPLATE/tester/one.phtml

one.phtml

/app/design/frontend/INTERFACE/TEMPLATE/tester/two.phtml

two.phtml

预期

这应该打印出来(在主页上,包含了块):

One.php
one.phtml
Two.php
two.phtml

实际输出

如果我在主页CMS页面中包含这些块,如下所示:

{{block type="test_tester/one" template="tester/one.phtml"}}
{{block type="test_tester/two" template="tester/two.phtml"}}

...我得到了预期的输出。但是,使用代码示例中的上述布局,我得到:

Two.php
two.phtml
Two.php
two.phtml

我想我已经疯了 - 我看不出我正在捣乱。

1 个答案:

答案 0 :(得分:1)

尝试在主页CMS页面中提供您的块名称。我收到的类似错误已经通过这种方式解决了。我看到你正在尝试将块包装在文本列表中,但是从我看到的内容你从未真正识别CMS页面中的块。尝试一下这个效果:

{{block type="test_tester/one" template="tester/one.phtml" name="testa"}}
{{block type="test_tester/two" template="tester/two.phtml" name="testb"}}

如果您无法远离父块作为容器,则可能需要重新考虑部分布局。如果不是这样做的话,请告诉我,我们会尝试别的。希望有所帮助。

谢谢, 乔