Magento 为不同的设备使用多个移动模板

Magento 为不同的设备使用多个移动模板,magento,Magento,我目前正在使用模块中的一个类来完成某些事情(比如在主体中添加一个“mobile”类来进行样式设置等)。我还一直在尝试为手机加载不同的模板,例如列表视图或产品页面,通过xml 我认为可以这样做的一种方法是使用助手来设置模板。例如,对于列表视图: <catalog_category_view> <reference name="root"> <action method="setTemplate"> <temp

我目前正在使用模块中的一个类来完成某些事情(比如在主体中添加一个“mobile”类来进行样式设置等)。我还一直在尝试为手机加载不同的模板,例如列表视图或产品页面,通过xml

我认为可以这样做的一种方法是使用助手来设置模板。例如,对于列表视图:

<catalog_category_view>
    <reference name="root">
        <action method="setTemplate">
            <template helper="mobiledetect/switchTemplate" />                  
        </action>
    </reference>
</catalog_category_view> 
这很好,但是如果我想为其他部分做类似的事情,例如ProductDetail页面,我需要显式地声明helper中的每个模板

有没有人能想出一种方法,可以用它作为默认模板的前缀或其他什么?例如,对于列表视图,默认值为目录/类别/视图.phtml-因此,如果在移动设备上查看,您将获得标准模板的mobile,从而获得目录/类别/移动视图.phtml

或者有没有其他的想法来完成类似的事情?我希望能够从local.xml进行设置,而不必每次添加新的移动模板时都编辑助手

我还考虑让一个观测者添加一个“移动”句柄,以便在xml布局中使用,但如果可以的话,这不是100%

另外,我知道我可以在模板文件中使用助手为手机提供不同的内容(我已经这样做了),但我对通过local.xml实现这一点的可能性感兴趣

p.S.2另外,请注意,我不想使用标准设计例外的原因是我可能希望有桌面/平板电脑/移动版本的文件

提前谢谢


答:根据Simon的回答,我做了以下工作

您知道magento默认设计例外情况吗?它们允许使用完全分离的包或主题。默认情况下,根据用户代理选择主题。您可以使用移动检测扩展此功能。主题在这里确定:
Mage\u Core\u Model\u Design\u Package::getTheme

   // set exception value for theme, if defined in config
    $customThemeType = $this->_checkUserAgentAgainstRegexps("design/theme/{$type}_ua_regexp");
    if ($customThemeType) {
        $this->_theme[$type] = $customThemeType;
    }

这将是一个很好的起点。

因此,采纳Simon的建议,我扩展了Mage_Core_Model_Design_软件包,并使用了以下内容:

const MOBILE_THEME = 'mobile';
const TABLET_THEME = 'tablet';

public function getTheme($type)
{

    $detect = new Mobile_Detect();
    if($detect->isTablet()){ 
        $this->_theme[$type] = self::TABLET_THEME;
    }
    elseif($detect->isMobile()){ 
        $this->_theme[$type] = self::MOBILE_THEME;
    };           

    return $this->_theme[$type];

}
所以,基本上,如果检测到手机或平板电脑,它实际上是在用“手机”或“平板电脑”更新系统->配置->设计->主题->主题->默认设置。这意味着我可以拥有以下主题结构:

app
- design
  - frontend
    - default
      - default
      - mobile
      - tablet
…简单地将模板覆盖放在这些文件夹中就意味着它们将被提供给正确的设备


似乎工作正常-如果遇到任何问题,我会发回。

好主意。如果我可以通过扩展来设置自定义层次结构,那么我甚至不需要使用xml,我可以将任何“移动”文件放在相应的包中,以自动覆盖基本的“桌面”版本。我肯定会研究这个问题,但我仍然对其他想法感兴趣。另外,请注意,我不想使用标准设计例外的原因是,我可能希望使用桌面/平板电脑/移动版本的文件。这样好吗?你对此有什么问题吗?我想知道我们是否可以创建一个主题,使magento网站看起来更像一个移动应用程序。我已经有一段时间没有真正使用它了,但它工作得很好,我从来没有遇到过任何问题。
app
- design
  - frontend
    - default
      - default
      - mobile
      - tablet