我尝试使用local.xml文件为主页设置1列模板:
<cms_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</cms_index_index>
但这不起作用。我怎么能这样做?
答案 0 :(得分:3)
主页是CMS页面。遗憾的是,您无法使用布局为CMS页面分配根模板,因为它们具有自己的属性“root_template”(cms_page表)。 您可以在后端更改此属性(CMS - 页面)。 或者您可以在代码中更改它:
$homePage = Mage::getModel('cms/page')->load('home', 'identifier');
$homePage->setRootTemplate('one_column');
$homePage->save();
我建议您编写 sql data upgrade ,这将更新主页的根模板值:
$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
$installer->startSetup();
$installer->run("
UPDATE `{$this->getTable('cms_page')}` SET `root_template` = 'one_column' WHERE `identifier` = 'home';
");
$installer->endSetup();
答案 1 :(得分:2)
我确信其他建议效果很好,但对我来说这看起来太复杂了。我所做的似乎工作得很好的是简单地将以下内容放入有问题的CMS页面的布局更新XML中(在本例中是您的主页)
<reference name="root">
<action method="setTemplate">
<template>page/1column.phtml</template>
</action>
</reference>
答案 2 :(得分:0)
问题出现在Mage_Cms_Helper_Page :: _ renderPage中。应用布局更新 - 应用前根模板(从后端配置):
Mage::dispatchEvent('cms_page_render', array('page' => $page, 'controller_action' => $action));
$action->loadLayoutUpdates();
$layoutUpdate = ($page->getCustomLayoutUpdateXml() && $inRange) ? $page->getCustomLayoutUpdateXml() : $page->getLayoutUpdateXml();
$action->getLayout()->getUpdate()->addUpdate($layoutUpdate);
$action->generateLayoutXml()->generateLayoutBlocks();
...
if ($page->getRootTemplate()) {
$action->getLayout()->helper('page/layout')
->applyTemplate($page->getRootTemplate());
}
另请注意此方法中唯一的事件是如何不方便地置于所有这一点之上......如果您想要彻底解决此问题(无需查询),您应该观察以下事件:
controller_action_postdispatch_cms_index_index
然后执行以下操作(未经测试,但应该有效):
$this->getEvent()->getControllerAction()->getLayout()->helper('page/layout')->applyTemplate('one_column');
然后再次渲染布局。这只是一个如何通过观察者解决这个问题的指南。