我试着用我的local.xml文件,设置为主页1column模板:如何为主页设置自定义模板?
<cms_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</cms_index_index>
但这不起作用。我怎样才能做到这一点?
我试着用我的local.xml文件,设置为主页1column模板:如何为主页设置自定义模板?
<cms_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</cms_index_index>
但这不起作用。我怎样才能做到这一点?
首页是CMS页面。遗憾的是,您无法使用布局为CMS页面分配根模板,因为它们具有自己的属性“root_template”(cms_page表)。 您可以在后端(CMS - 页面)中更改此属性。 或者你可以改变它的代码:
$homePage = Mage::getModel('cms/page')->load('home', 'identifier');
$homePage->setRootTemplate('one_column');
$homePage->save();
我建议你写SQL数据升级,这将更新主页根模板值:在Mage_Cms_Helper_Page
$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();
问题奠定:: _renderPage。布局更新应用于-before-根模板(从后端配置)应用:
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');
然后再次渲染布局。这只是一个指导方针,如何通过观察员来解决这个问题。
感谢您的提示。但对于观察者来说,它会慢一点。 – Snowcore 2011-06-10 15:28:11
@Snowcore:我认为性能受到的影响几乎可以忽略不计......另外它当然取决于行为的要求;观察者解决方案将阻止用户修改页面布局。 – 2011-06-10 16:18:59
我确定其他建议的效果很好,但这一切对我来说都太复杂了。我所做的似乎工作得很好,是简单地将以下内容放入有问题的CMS页面(本例中为您的主页)的Layout Update XML中
<reference name="root">
<action method="setTemplate">
<template>page/1column.phtml</template>
</action>
</reference>
看起来与原始问题完全相同。 – clockworkgeek 2011-06-13 13:34:21
@clockworkgeek - 不完全。他将他的代码放在local.xml中,并且它引用了root,但仅限于cms_index_index句柄。我把它放在CMS主页本身的布局更新XML部分,并且它引用了根。我想这让所有的区别:) – BrianVPS 2011-06-15 18:54:48
感谢您的解释。 – clockworkgeek 2011-06-15 19:27:39
或者更简单Snowcore的XML可以改为使用'setRootTemplate'方法。 – clockworkgeek 2011-06-10 13:44:09
@clockworkgeek如何?我试图将布局“setTemplate”更改为“setRootTemplate” - 但不起作用。 – Snowcore 2011-06-10 13:54:56
它不?我不应该这么容易地假设。我犯了一个错误。 – clockworkgeek 2011-06-10 14:32:22