Magento:每个主题的不同主页,但使用相同的商店视图,而不更改URL?

时间:2013-10-13 18:18:13

标签: php magento magento-1.7

我最近为我的Magento网站开发了一个新的移动主题,包含与普通桌面主题不同的CSS / JS /布局/模板文件。

如果检测到移动用户代理字符串,我在设计部分使用Magento的“匹配表达式”功能切换到移动主题。

我希望移动网站拥有与桌面主页不同的主页,但这两个主题都在正常的商店视图中运行,因此我不确定如何执行此操作。

是否可以在 per-theme 的基础上设置不同的主页,而不是按商店查看?

因此,如果桌面用户导航到www.example.com/,他们会看到CMS页面为“主页”,但如果移动用户导航到相同的网址,他们会看到CMS页面“移动房屋”?

3 个答案:

答案 0 :(得分:2)

@Marius答案是正确的,当只考虑Magento安装的股票时,你不能分开CMS页面的布局,但是话说回来,Magento仍然是OOP和PHP所以有办法设置一个工具来做你做的事情想。

它的技巧是创建一个自定义布局处理程序,该处理程序被添加到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个主页 但是,您可以在同一页面上添加两个页面内容的内容,并隐藏不需要的内容。如果您在移动设备上隐藏桌面内容,反之亦然。