我在 CMS->page “主页”文件中有。在内容中,我正在写这样的一行:
{{block type="myfolder/newfile" template="myfolder/newfile.phtml"}}
我想在内容文件 newfile.phtml 中呈现。我做错了什么?
我的新文件位于:app\design\frontend\default\themeas\template\myfolder\newfile.phtml
你需要给你的区块起个名字。这就是 Magento 引用该块的方式。此外,您的块类型必须有效才能渲染块。对于默认块尝试使用 type="core/template"
您的新代码应如下所示:
{{block type="core/template" name="my.block.name" template="myfolder/newfile.phtml"}}
关于 type 属性的另一个注意事项,它实际上不是目录/文件结构,而是使用 Magento 自动加载器映射的 URI。“核心”与 Mage_Core_Block_Core 类(在 app/code/core/Mage/Core 目录下)相关,然后斜杠后的信息与该目录内的文件夹相关。因此 type="core/template" 解析为位于 app/code/core/Mage/Core/Block/Template.php 的此类 Mage_Core_Block_Core_Template。type 属性所做的只是告诉 Magento 您需要在块中加载哪些方法。
您可以尝试的其他几种块类型是:
对于产品列表:catalog/product_list
对于文本列表(自动渲染子块的块):core/text_list
对于类别块:catalog/category_view
还有很多,找到新的一个好方法是查看一个与您尝试执行的操作类似的块,并找到它在 XML 中定义的位置。
如果要将变量传递给块,可以执行以下操作:
{{block type="core/template" name="my.block.name" myvariable="5" template="myfolder/newfile.phtml"}}
从 Magento 1.9.2.2 或等效补丁开始,您还需要授予新块的权限。您在后端执行此操作:系统 | 权限 | 块
即,如果您希望显示:
{{block type="catalog/product_bestseller" name="krillo.bestseller" template="catalog/product/bestseller.phtml"}}
添加您的块名称“catalog/product_bestseller”并将状态设置为“允许”
我想提供一个替代方案:
上面的答案工作正常,但是我个人的偏好是不要在 CMS 页面的内容中插入块,因为在尝试使用 WYSIWYG 编辑文本和内容时,客户可以(并且已经)删除了这一关键行。
您可以在 CMS 页面的布局 > 布局更新 XML部分添加以下内容:
<reference name="content">
<block after="-" type="your/block_type" name="block.name" template="your/block/template/file.phtml"/>
<action method="insert" ifconfig="your/block_type">
<block>block.name</block>
</action>
</reference>
这样,客户不太可能编辑此选项卡!
希望这可以帮助其他人解决这个问题!