我試着用我的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