在Magento中添加自定义块

时间:2015-05-11 16:29:05

标签: php magento

在Magento 1.9中,我想在主页上添加一个自定义块,但没有任何反应。我有这些文件:

应用程序/设计/前端/ [mytheme的] /default/layout/local.xml

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <default>
        <reference name="root">
            <block type="core/text_list" name="customblock" as="customblock" translate="label">
                <label>Custom Block</label>
            </block>
        </reference>
        <reference name="customblockreference">
            <block type="core/template" name="customblock" template="customblock.phtml" />
        </reference>
    </default>
</layout>

在homepage.phtml中

 <?php echo $this->getChildHtml('customblock') ?>

在 应用程序/设计/前端/ [mytheme的] /default/template/customblock.phtml

<h1>test</h1>

我在哪里做错了?

4 个答案:

答案 0 :(得分:2)

我假设customblock是您用于主页的根模板,因此请澄清是否不是这样。

我认为问题是homepage.phtml阻止core/text_list会在您的根模板customblock.phtml中呈现,但您尚未向该块添加任何内容。 core/text_list只是一个容器,它会渲染添加到其中的子块。

您似乎可能尝试将<reference name="root"> <block type="core/text_list" name="customblock" translate="label"> <label>Custom Block</label> <block type="core/template" name="customblock-child" template="customblock.phtml"/> </block> </reference> 添加到新core/text_list,如果是这样的话,它应该是这样的:

core/text_list

这将直接将子模板块添加到<reference name="customblock"> <block type="core/template" name="customblock-child" template="customblock.phtml"/> </reference> ,因为您只是在同一个文件中定义了这两个模块。但是,如果您需要从其他位置向{{1}}添加新块,则可以这样执行:

{{1}}

答案 1 :(得分:1)

我想加入梦幻般的答案。如果您在XML文件中调用它。您只需要引用HomePage CMS页面。您可以使用主页<cms_index_index>这样做。

<!-- Homepage -->
<cms_index_index>
    <reference name="root">
        <block type="core/text_list" name="customblock" translate="label">
            <label>Custom Block</label>
            <block type="core/template" name="customblock-child" template="customblock.phtml"/>
        </block>
    </reference>
</cms_index_index> 

答案 2 :(得分:0)

您应该在app / etc / modules上定义您的模块,如果您创建的模块应该在admin site(web)配置&gt;中看到提前,并检查模块是否已激活

<?xml version="1.0"?>
<config>
<modules>
    <your_module>   <!-- Name of Module -->
        <active>true</active>  <!-- This says if the module is active or not -->
        <codePool>local</codePool> <!-- This says the location of the module i.e inside the local folder. It can also be community folder. -->
    </your_module>
</modules>

请记住,您自己的实现应该位于本地代码池上,核心代码池应该位于magento dev上。当然你可以扩展本地的功能

答案 3 :(得分:0)

我的解决方案

我从文件替换: app/design/frontend/[mytheme]/default/layout/local.xml

这样:

<block type="core/text_list" name="customblock" as="customblock" translate="label">
     <label>Custom Block</label>
</block>

为:

<block type="core/text_list" name="customblockreference" translate="label">
     <label>Custom Block</label>
</block>

所以,现在是:

<?xml version="1.0" encoding="UTF-8"?>
<layout>
<default>
    <reference name="root">
         <block type="core/text_list" name="customblockreference" translate="label">
              <label>Custom Block</label>
         </block>
    </reference>
    <reference name="customblockreference">
        <block type="core/template" name="customblock" template="customblock.phtml" />
    </reference>
</default>

页面homepage.phtml中的<?php echo $this->getChildHtml('customblock') ?>变为<?php echo $this->getChildHtml('customblockreference') ?>