2011-06-10 82 views
1

我试着用我的local.xml文件,设置为主页1column模板:如何为主页设置自定义模板?

<cms_index_index> 
    <reference name="root"> 
     <action method="setTemplate"><template>page/1column.phtml</template></action> 
    </reference> 
</cms_index_index> 

但这不起作用。我怎样才能做到这一点?

回答

3

首页是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(); 
+0

或者更简单Snowcore的XML可以改为使用'setRootTemplate'方法。 – clockworkgeek 2011-06-10 13:44:09

+0

@clockworkgeek如何?我试图将布局“setTemplate”更改为“setRootTemplate” - 但不起作用。 – Snowcore 2011-06-10 13:54:56

+0

它不?我不应该这么容易地假设。我犯了一个错误。 – clockworkgeek 2011-06-10 14:32:22

0

问题奠定:: _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'); 

然后再次渲染布局。这只是一个指导方针,如何通过观察员来解决这个问题。

+1

感谢您的提示。但对于观察者来说,它会慢一点。 – Snowcore 2011-06-10 15:28:11

+0

@Snowcore:我认为性能受到的影响几乎可以忽略不计......另外它当然取决于行为的要求;观察者解决方案将阻止用户修改页面布局。 – 2011-06-10 16:18:59

2

我确定其他建议的效果很好,但这一切对我来说都太复杂了。我所做的似乎工作得很好,是简单地将以下内容放入有问题的CMS页面(本例中为您的主页)的Layout Update XML中

<reference name="root"> 
    <action method="setTemplate"> 
     <template>page/1column.phtml</template> 
    </action> 
</reference> 
+0

看起来与原始问题完全相同。 – clockworkgeek 2011-06-13 13:34:21

+0

@clockworkgeek - 不完全。他将他的代码放在local.xml中,并且它引用了root,但仅限于cms_index_index句柄。我把它放在CMS主页本身的布局更新XML部分,并且它引用了根。我想这让所有的区别:) – BrianVPS 2011-06-15 18:54:48

+0

感谢您的解释。 – clockworkgeek 2011-06-15 19:27:39