我只是在使用Magento和表面看起来相当直观的事情,似乎没有像预期的那样工作。这是一个非常基本的模板示例,我试图在深入挖掘之前在“hello world”级别工作。
在我的page.xml布局的“header”块定义中,我有以下块:
<block type="core/text_list" name="helloRob" as="helloRob" template="page/html/hellorob.phtml" />
然后,在我的header.phtml文件中,我添加了...
<?php echo $this->getChildHtml('helloRob'); ?>
hellorob.phtml文件的内容是:
<h1>Hello Rob</h1>
然而,在显示页面时,我没有在标题中获得预期的H1元素输出。 H1如果删除“getChildHtml”调用并将其替换为实际的HTML,则显示H1。所以我知道我的自定义header.phtml文件正在加载。我还能够确认我正在将块添加到正确的布局XML文件中,因为当我在同一文件中注释掉另一个块时,注释掉的块不再出现在我的页面上。
我检查了代码,寻找明显的东西,比如拼写错误。我还检查了任何命名冲突 - 因此“helloRob”而不是“helloWorld”。
我觉得我错过了一些非常明显的东西,比如找你的眼镜只是为了找到它们。
任何帮助 - 代码 - 而不是我的眼镜 - 将不胜感激!
- 罗布
答案 0 :(得分:1)
这里的问题是您对块类型的理解。 Magento中的块做了不同的事情,你在这里使用的核心/ 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;
}