1

我希望我的所有 CMS 页面(但不是所有页面)都使用自定义模板文件,但是当我在 local.xml 文件中使用 setTemplate 操作时,它不会更改模板。该块正在正确渲染,但没有正确的布局。

我现在使用的 XML 是:

<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">

    <cms_page_view>
        <reference name="root"> 
            <action method="setTemplate"><template>page/cms-page.phtml</template></action>
        </reference>
        <reference name="right">
            <block type="catalog/navigation" name="default_page_view" template="navigation/game-menu.phtml"/>
        </reference>
    </cms_page_view>

</layout>

我究竟做错了什么?

4

1 回答 1

3

您没有做错任何事情 - 您的指令被实体数据覆盖。原因见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>
于 2013-07-07T22:01:55.673 回答