在Magento中创建一个新块

时间:2010-12-07 15:27:04

标签: php xml layout magento block

昨天我问了这个问题Static block on home page in Magento,它回答了我关于将cms /块挂钩到现有块的问题(在该示例中为内容)。

但现在我想知道如何创建自己的块。

我在.phtml模板中有这个:

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

这在我的cms.xml文件中

<reference name="home_flash">
  <block type="cms/block" name="home-page-flash" before="content">
    <action method="setBlockId"><block_id>home-page-flash</block_id></action>
  </block>
</reference>

但这不起作用。

我还尝试在page.xml文件中创建自己的块类型(通过复制breadcrumbs声明):

<block type="page/html_home_block" name="home_block" as="home_block" template="page/template/home_block.phtml"/>

该文件存在但未呈现。

然而,当我像这样引用块时:

<block type="page/html_breadcrumbs" name="home_block" as="home_block" template="page/template/home_block.phtml"/>

它呈现我的主页块模板,但原始的cms /块没有附加到它。

希望所有不同的案例能够显示正在发生的事情并突出显示我的知识差距,以便有人回答,我是否必须在某处“注册”我的新“home_block”类型?

1 个答案:

答案 0 :(得分:5)

您可以使用许多不同的块,而无需创建自己的块。在这种情况下,我认为core/text_list是合适的,因为它不需要模板,并且可以根据需要包含尽可能多的子块。

<?xml version="1.0"?>
<layout version="0.1.0"><!-- All layout files start with this -->
    <cms_index_index><!-- Index directive is the same as "home" page -->
        <reference name="root"><!-- For more blocks that can be referenced see "default" directive -->
            <block type="core/text_list" name="home_flash">
                <block type="cms/block" name="home-page-flash">
                    <action method="setBlockId"><block_id>home-page-flash</block_id></action>
                </block>
            </block>
        </reference>
    </cms_index_index>

    <!-- More directives might go here -->

</layout>

值得了解的其他有用块类型分别是core/textcore/template Mage_Core_Block_TextMage_Core_Block_Template。他们得到了最多的使用 您的自制块类型page/html_home_block没有任何具有匹配名称的PHP类,如果您真正创建自己的类,则无法使用page前缀,因为Magento已经

要创建块,您只需在布局文件中添加<block>标记 要创建块类型,您需要编写一个PHP类,为它指定一个命名空间并将其声明为模块的一部分 要添加到现有块,您需要使用<reference>标记。

Magento Knowledge Base上有很多优秀文章,包括Theming & Design上的一些文章。