1

我想创建一个块并将该块添加到我的模板中

$this->_addContent($this->getLayout()->createBlock("device/device"))

现在,它没有显示任何内容。

要注意哪些点,以便我的块将被渲染(要注意哪些文件?)

笔记:

 COMPANY NAME: Abc
 MODULE NAME: Device

此外,createBlock("device/device") 返回“false”

4

2 回答 2

9

device/device传递给的字符串createBlock是类别名。类别名为 Magento 开发人员提供了一种在不使用实际类名的情况下引用类的方法。这种间接允许一个类被替换(或用 Magento 术语重写)另一个类,而无需更改任何实例化和使用该类的代码。

您首先在模块config.xml文件中定义类的前缀,如下所示(注意:将此代码添加到任何现有标签中,而不是将其放在底部config.xml):

<config>
    <global>
        <blocks>
            <device>
                <class>Abc_Device_Block</class>
            </devicer>
        </blocks>
    </global>
</config>

在为块构建类名时,xml 的部分是别名中 / 之前的部分,并在生成类名时替换标签的内容。然后将 / 替换为 _ 并将类别名的其余部分附加到类名中。因此,使用类别名device/device和上面的 XML,将构建以下类名Abc_Device_Block_Device,Magento 将期望在Abc/Device/Block/Device.php. 它将按照 include_path 中指定的顺序搜索文件夹,通常是app/code/local,然后app/code/communityapp/code/core,最后是 `lib.

相同的基本逻辑也适用于模型和助手类。

Alan Storm不可或缺的CommerceBug扩展有一个很好的工具,可以测试模型/块/助手类别名在类名和文件位置方面映射到什么。

此方法的其他参数是可用于从布局 XML 文件中引用块(并修改它)的名称,以及可在布局 XML 中找到的其他属性的数组。

于 2012-06-21T23:49:57.787 回答
2

这是一个很好的答案,吉姆。给它加一个点,优先级是

  1. 当地的
  2. 社区然后来了
  3. 核心如果我没看错。
于 2012-06-22T00:46:39.937 回答