0

我只是在使用 Magento 和一些表面上看起来相当直观的东西,似乎并没有按预期工作。这是一个非常基本的模板示例,我试图在深入挖掘之前在“hello world”级别上工作。

在我的 page.xml 布局中的“标题”块定义中,我包含以下块:

<block type="core/text_list" name="helloRob" as="helloRob" template="page/html/hellorob.phtml" />

然后,在我的 header.phtml 文件中,我添加了...

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

helloob.phtml 文件的内容是:

<h1>Hello Rob</h1>

然而,在显示页面时,我没有在标题中得到预期的 H1 元素输出。如果我删除“getChildHtml”调用并将其替换为实际的 HTML,则它会显示 H1。所以我知道我的自定义 header.phtml 文件正在加载。我还能够确认我正在将我的块添加到正确的布局 XML 文件中,因为当我注释掉同一文件中的另一个块时,被注释掉的块不再出现在我的页面上。

我检查了代码,寻找明显的东西,比如错字。我还检查了任何命名冲突——因此是“helloRob”而不是“helloWorld”。

我觉得我错过了一些非常明显的东西,比如寻找你的眼镜却发现它们在你的头顶上。

任何帮助 - 代码 - 而不是我的眼镜 - 将不胜感激!

- 抢

4

1 回答 1

1

这里的问题是您对块类型的理解。Magento 中的块做不同的事情,你在这里使用的那个 core/text_list 用于特定目的。您可以通过查看代码块文件来查看块的作用,core/text_list 位于 app/code/core/Mage/Core/Block/Text/List.php

 protected function _toHtml()
{
    $this->setText('');
    foreach ($this->getSortedChildren() as $name) {
        $block = $this->getLayout()->getBlock($name);
        if (!$block) {
            Mage::throwException(Mage::helper('core')->__('Invalid block: %s', $name));
        }
        $this->addText($block->toHtml());
    }
    return parent::_toHtml();
}

如您所见,它的目的是打印出子块。这种块类型用于文本菜单和纯粹作为其他块的容器的块。

当您正在寻找一个只打印模板内容的块时, type="core/template" 就可以了,它的 _toHtml() 方法是

 protected function _toHtml()
{
    if (!$this->getTemplate()) {
        return '';
    }
    $html = $this->renderView();
    return $html;
}
于 2013-10-30T19:46:48.183 回答