Layout 如何为主页设置自定义模板?
我已尝试使用local.xml文件为主页设置1列模板:Layout 如何为主页设置自定义模板?,layout,magento,Layout,Magento,我已尝试使用local.xml文件为主页设置1列模板: <cms_index_index> <reference name="root"> <action method="setTemplate"><template>page/1column.phtml</template></action> </reference> </cms_index_index> 第/1页
<cms_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
</cms_index_index>
第/1页column.phtml
但这是行不通的。我怎样才能做到这一点?主页是一个CMS页面。不幸的是,您不能使用布局为CMS页面分配根模板,因为它们有自己的属性“根模板”(CMS页面表)。 您可以在后端(CMS-Pages)中更改此属性。 或者您可以在代码中对其进行更改:
$homePage = Mage::getModel('cms/page')->load('home', 'identifier');
$homePage->setRootTemplate('one_column');
$homePage->save();
我建议您编写sql数据升级,它将更新主页的根模板值:
$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();
主页是一个CMS页面。不幸的是,您不能使用布局为CMS页面分配根模板,因为它们有自己的属性“根模板”(CMS页面表)。 您可以在后端(CMS-Pages)中更改此属性。 或者您可以在代码中对其进行更改:
$homePage = Mage::getModel('cms/page')->load('home', 'identifier');
$homePage->setRootTemplate('one_column');
$homePage->save();
我建议您编写sql数据升级,它将更新主页的根模板值:
$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();
问题在于Mage\u Cms\u Helper\u页面::\u 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());
}
还请注意,此方法中的唯一事件是如何不方便地置于所有这些事件之上的。。。如果要干净地修复此问题(无需查询),应观察以下事件:
控制器\u操作\u后调度\u cms\u索引\u索引
然后执行以下操作(未经测试,但应可行):
然后再次渲染布局。这只是一个如何通过观察者解决问题的指南。问题在于Mage\u Cms\u Helper\u页面::\u 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());
}
还请注意,此方法中的唯一事件是如何不方便地置于所有这些事件之上的。。。如果要干净地修复此问题(无需查询),应观察以下事件:
控制器\u操作\u后调度\u cms\u索引\u索引
然后执行以下操作(未经测试,但应可行):
然后再次渲染布局。这只是一个如何通过观察者来解决这个问题的指南。我相信其他建议都很有效,但对我来说,这一切看起来太复杂了。我所做的工作似乎很有效,就是简单地将以下内容放入所讨论的CMS页面的布局更新XML中(在本例中,是您的主页)
第/1页column.phtml
我相信其他建议都很有效,但对我来说这一切看起来太复杂了。我所做的工作似乎很有效,就是简单地将以下内容放入所讨论的CMS页面的布局更新XML中(在本例中,是您的主页)
第/1页column.phtml
或者更简单地说,可以将Snowcore的XML更改为使用setRootTemplate
方法。@clockworkgeek如何更改?我试图将布局“setTemplate”更改为“setRootTemplate”-但不起作用。它不起作用?我不该这么轻易地假设。我犯了一个错误。似乎唯一有效的方法是通过代码(sql升级)进行设置@谢谢你!或者更简单地说,可以将Snowcore的XML更改为使用setRootTemplate
方法。@clockworkgeek如何更改?我试图将布局“setTemplate”更改为“setRootTemplate”-但不起作用。它不起作用?我不该这么轻易地假设。我犯了一个错误。似乎唯一有效的方法是通过代码(sql升级)进行设置@谢谢你!谢谢你的提示。但是使用observer会稍微慢一点。@Snowcore:我认为性能的影响几乎可以忽略不计。。。当然,这也取决于行为的要求;observer解决方案将阻止用户修改页面布局。谢谢提示。但是使用observer会稍微慢一点。@Snowcore:我认为性能的影响几乎可以忽略不计。。。当然,这也取决于行为的要求;观察者解决方案将阻止用户修改页面布局。这看起来与原始问题相同。@clockworkgeek-不完全一样。他将代码放在local.xml中,它引用root,但仅用于cms\u index\u索引句柄。我把我的放在CMS主页本身的布局更新XML部分,它引用根目录。我想这是最重要的:)看起来和原来的问题一样。@clockworkgeek-不完全一样。他将代码放在local.xml中,它引用root,但仅用于cms\u index\u索引句柄。我把我的放在CMS主页本身的布局更新XML部分,它引用根目录。我想这是最重要的:)