2011-06-10 45 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

相關問題