我最近为我的Magento网站开发了一个新的移动主题,包含与普通桌面主题不同的CSS / JS /布局/模板文件。
如果检测到移动用户代理字符串,我在设计部分使用Magento的“匹配表达式”功能切换到移动主题。
我希望移动网站拥有与桌面主页不同的主页,但这两个主题都在正常的商店视图中运行,因此我不确定如何执行此操作。
是否可以在 per-theme 的基础上设置不同的主页,而不是按商店查看?
因此,如果桌面用户导航到www.example.com/,他们会看到CMS页面为“主页”,但如果移动用户导航到相同的网址,他们会看到CMS页面“移动房屋”?
答案 0 :(得分:2)
它的技巧是创建一个自定义布局处理程序,该处理程序被添加到CMS的页面布局中,这样,您就可以通过layout.xml文件指定页面上需要的内容。
我自己做了,所以有可能。
创建一个自定义模块,该模块具有布局文件和观察者模型,其中包含可在以下事件中触发的函数。
<controller_action_layout_load_before>
然后,此功能可用于确定您所在的页面。这是我在函数中用于注入布局句柄的代码(这可以大大改进以获得更好的可伸缩性)
// Triggered on the controller_action_layout_load_before Event
public function addCustomHandles( $observer ) {
$update = Mage::getSingleton('core/layout')->getUpdate();
if ( Mage::app()->getFrontController()->getRequest()->getModuleName() == 'cms' ) {
$update->addHandle( 'cmslayouthandler_cms_page_' . Mage::getSingleton('cms/page')->getIdentifier() );
}
}
此函数获取布局单例,确认它位于CMS页面上,并构建基于当前所选页面的处理程序。它将添加如下处理程序:
'cmslayouthandler_cms_page_home'
然后,您将能够在您创建的模块布局文件中更新该页面的布局,如下所示:
<layout version="1.0.0">
<cmslayouthandler_cms_page_home>
<reference name="content">
<block type="core/template" name="home_page" template="page/template/home.phtml" />
</reference>
</cmslayouthandler_cms_page_home>
</layout>
考虑到通过Magento管理面板创建的CMS页面需要“内容”部分中的值,您可以轻松地通过DB直接放置空白虚拟值或将值清零,我更喜欢第一种方法。
祝你好运!
答案 1 :(得分:1)
我最终尝试了Marius上面的建议,并编辑cms.xml
以使用我自己的模板覆盖索引页面(即主页),该模板有效:
<cms_index_index translate="label">
<reference name="content">
<block type="catalog/navigation" name="alternative_home" template="alternative_home.phtml" />
</reference>
<remove name="cms.wrapper"/>
</cms_index_index>
您可能还希望尝试覆盖cms_index_defaultindex
。
答案 2 :(得分:0)
您在同一商店视图中不能拥有2个主页 但是,您可以在同一页面上添加两个页面内容的内容,并隐藏不需要的内容。如果您在移动设备上隐藏桌面内容,反之亦然。