创建一个基本的“hello world”出现在Magento页面标题中

时间:2013-10-30 19:15:39

标签: magento magento-1.7

我只是在使用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”。

我觉得我错过了一些非常明显的东西,比如找你的眼镜只是为了找到它们。

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

- 罗布

1 个答案:

答案 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;
}