题
好的,所以我制作了一个模块,并使用它来管理商店上的所有自定义布局。现在,我需要使用模板向某些页面添加一些块。我在自定义布局中添加了以下行:
<?php echo $this->getChildHtml('cms_left') ?>
在更新布局XML内部,我添加了以下内容:
<reference name="cms_left">
<block type="cms/block" name="cms_left_test" before="-">
<action method="setBlockId"><block_id>cms_left_test</block_id></action>
</block>
</reference>
并包含其相关性,这是我Modles Config.xml的相关部分,该部分处理此自定义布局:
<cms_pages module="page" translate="label">
<label>cms pages</label>
<template>page/cms_pages.phtml</template>
<layout_handle>cms pages</layout_handle>
</cms_pages>
据我所知,现在应该在此页面上显示cms_left_test块,但是它不起作用。我错过了某个地方的一步吗?我尝试查找一些示例,但是因为我从各地绘制了零碎的碎片,所以我不确定我的方法是否完全正确。
解决方案
您的布局中如何定义块“ cms_left”?或者更好的是“定义?”。您正在称呼:
<reference name="cms_left">
<block type="cms/block" name="cms_left_test" before="-">
<action method="setBlockId"><block_id>cms_left_test</block_id></action>
</block>
</reference>
但是为了能够引用一个块,应该存在块。
我认为您在自定义布局文件中缺少这件XML。
<default>
<reference name="root">
<block type="core/text_list" name="cms_left" as="cms_left" translate="label">
<label>CMS left block</label>
</block>
</reference>
</default>
其他提示
从外观上看,块 cms_left
未在任何地方定义。为了使其工作,您应该将其定义为 core/text_list
布局定义中的某个地方。然后,您可以像您试图做的那样引用它并添加新块。假设 cms_left
是一个直接的孩子 root
, ,您可以执行以下操作:
<reference name="root">
<block name="cms_left" type="core/text_list" />
</reference>
确保将其添加到上面的代码之前。