我就是不明白...这会输出正确的 html:
file: /design/default/template/catalog/product/view.phtml
<?php
echo $this->getLayout()
->createBlock('core/template')
->setTemplate('catalog/product/view/teasers.phtml')
->toHtml();
?>
但是如果我在 local.xml 中声明该 block 并使用 getChildHtml(),则它不起作用:
file: /design/default/layout/local.xml
<catalog_product_view translate="label">
<reference name="content">
<block
template="catalog/product/view/teasers.phtml"
type="core/template"
name="teasers"
as="teasers"
></block>
</reference>
</catalog_product_view>
file: /design/default/template/catalog/product/view.phtml
<?php
echo $this->getChildHtml('teasers');
?>
我还需要其他东西吗?
最佳答案
对于经验丰富的 Magento 开发人员来说,这个问题不太有意义。希望解释为什么它没有意义可以帮助您找到问题的解决方案。
首先,您的 local.xml
路径不正确
/design/default/layout/local.xml
Magento 的结构如下
app/design/frontend/package-name/theme-name/layout/local.xml
您的路径中缺少包和/或主题名称。这使得在这里给你提供建议很困难——你确定 Magento 能看到你的 local.xml
文件吗? (使其无效 XML 并重新加载以查找错误是测试此问题的快速方法)
其次,您说过您正在使用 getChildHtml
来呈现该 block ,但同时您将其添加到 content
block 中。 content
block 是一个 test/list
block ,它将自动渲染添加到其中的任何 block 。 content
block 没有 phtml
模板,因此您无法调用 getChildHtml
。您从哪里调用 getChildHtml
?
关于Magento 自定义 block 会匿名加载,但在布局文件中声明时不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239785/