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したがって、ディレクティブは、呼び出しによって追加される完全なアクション名 handle の下で処理されてい$action->addActionLayoutHandles();ます。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 に答える