Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个基本的;“你好,世界”;显示在Magento页眉中的步骤_Magento_Magento 1.7 - Fatal编程技术网

创建一个基本的;“你好,世界”;显示在Magento页眉中的步骤

创建一个基本的;“你好,世界”;显示在Magento页眉中的步骤,magento,magento-1.7,Magento,Magento 1.7,我只是在用Magento和一些表面上看起来很直观的东西,看起来并不像预期的那样工作。下面是一个非常基本的模板示例,在深入挖掘之前,我正在尝试在“hello world”级别进行工作 在my page.xml布局中的“header”块定义中,我包含以下块: <block type="core/text_list" name="helloRob" as="helloRob" template="page/html/hellorob.phtml" /> 然后,在我的header.ph

我只是在用Magento和一些表面上看起来很直观的东西,看起来并不像预期的那样工作。下面是一个非常基本的模板示例,在深入挖掘之前,我正在尝试在“hello world”级别进行工作

在my 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元素输出。如果我删除“getChildHtml”调用并用实际的HTML替换它,那么它将显示H1。所以我知道我的自定义header.phtml文件正在加载。我还能够确认我正在将我的块添加到正确的布局XML文件中,因为当我注释掉同一文件中的另一个块时,注释掉的块不再出现在我的页面上

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

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

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


--Rob

这里的问题是您对块类型的理解。Magento中的块做不同的事情,这里使用的核心/文本列表有特定的用途。您可以通过查看块的代码块文件查看块的功能,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;
}

谢谢你,卢克!我发现Magento有很多“我不知道,我不知道”的例子。你是对的,除了Magento的许多其他方面之外,我对块类型的理解是缺乏的。我的最终目标(我的问题是起点)是将几行代码(包括块加载)抽象成一个独立的块,然后站点管理员可以通过CMS页面的自定义显示XML来打开/关闭该块。有了你的信息,我能够成功地在标题中创建中间层块,并在CMS页面上按预期显示。