您没有做错任何事情 - 您的指令被实体数据覆盖。原因见Mage_Cms_Helper_Page::_renderPage()
:
protected function _renderPage(/*...*/)
{
//snip...
$action->getLayout()->getUpdate()
->addHandle('default')
->addHandle('cms_page');
$action->addActionLayoutHandles();
if ($page->getRootTemplate()) {
$handle = ($page->getCustomRootTemplate()
&& $page->getCustomRootTemplate() != 'empty'
&& $inRange) ? $page->getCustomRootTemplate() : $page->getRootTemplate();
$action->getLayout()->helper('page/layout')->applyHandle($handle);
}
//snip...
}
因此,您的指令正在cms_page_view
通过$action->addActionLayoutHandles();
调用添加的完整操作名称 handle 进行处理。虽然 CMS 页面实际上总是通过管理员保存一个root_template
值,但这个值总是会覆盖基于文件的指令。
虽然可以更新数据,但可能会被覆盖。 XML。在您的自定义模块的配置 XML 中(或者app/etc/local.xml
如果这是非分布式更改):
<global>
<page>
<layouts>
<cms_page_custom>
<label>Empty</label>
<template>page/cms-page.phtml</template>
<layout_handle>cms_page_custom</layout_handle>
</cms_page_custom>
</layouts>
</page>
</global>
这将为 CMS 页面管理期间的选择输入提供选项。要完成这项工作,请在您的自定义布局 XML 中:
<cms_page_custom>
<reference name="root">
<action method="setTemplate"><template>page/cms-page.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
<action method="setLayoutCode"><name>empty</name></action>
</reference>
</cms_page_custom>