【问题标题】:Magento: different home page for each theme, but using same store view, and without changing URL?Magento:每个主题都有不同的主页,但使用相同的商店视图,并且不更改 URL?
【发布时间】:2013-10-13 18:18:12
【问题描述】:

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

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

我希望移动网站的主页与桌面网站不同,但是这两个主题都超出了正常的商店视图,所以我不知道该怎么做。

是否可以按主题设置不同的主页,而不是按商店查看?

如果桌面用户导航到 www.example.com/,他们会看到 CMS 页面“home”,但如果移动用户导航到相同的 URL,他们会看到 CMS 页面“mobile-home”?

【问题讨论】:

    标签: php magento magento-1.7


    【解决方案1】:

    @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 页面需要在“内容”部分中有一个值,您可以轻松地放置一个空白的虚拟值或直接通过数据库将值清零,我个人更喜欢第一种方法。

    祝你好运!

    【讨论】:

      【解决方案2】:

      我最终尝试了上述 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

      【讨论】:

        【解决方案3】:

        同一商店视图中不能有 2 个主页。
        但是您可以在同一页面上添加两个页面内容的内容,并隐藏不需要的内容。如果您在移动设备上隐藏桌面内容,反之亦然。

        【讨论】:

        • 该死,我曾希望避免这样的解决方法。通过 XML 文件或类似文件没有其他方法吗?
        • 您可以尝试使用每个主题的&lt;cms_index_index&gt; 句柄(这是主页的布局句柄)。这可以让你得到你需要的东西
        • 是的,我刚刚查看了通过 Magento Connect 找到的热门HTML5 mobile theme,它正在更改主页的布局(使用相同的商店视图),而不包含默认的 CMS 页面内容,我想这就是我想要的。我会试着弄清楚它是怎么做的,如果我能弄清楚,我会在这里发帖。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 2017-06-09
        • 1970-01-01
        相关资源
        最近更新 更多