如何在Magento中获取当前主题名称

sha*_*ank 9 php magento

在magento我试图获得当前的主题或包名但没有找到任何东西.我使用了getSkinUrl('),但它的返回皮肤路径不是包或主题名称.请帮助我如何获取主题或包名称.

Dre*_*ter 26

当前套餐

Mage::getSingleton('core/design_package')->getPackageName()
Run Code Online (Sandbox Code Playgroud)

当前主题(前端)

Mage::getSingleton('core/design_package')->getTheme('frontend')
Run Code Online (Sandbox Code Playgroud)


Pet*_*r A 12

请注意@Drew Hunter的上述答案并不完全正确.虽然getTheme()是期望的函数调用,但字符串'frontend'不是此方法的可接受参数.此方法唯一允许的值为:

  • 现场
  • 布局
  • 模板
  • 默认
  • 皮肤

也就是说,此函数的正确用法是以下行之一:

Mage::getSingleton('core/design_package')->getTheme()
Mage::getSingleton('core/design_package')->getTheme('locale')
Mage::getSingleton('core/design_package')->getTheme('layout')
Mage::getSingleton('core/design_package')->getTheme('template')
Mage::getSingleton('core/design_package')->getTheme('default')
Mage::getSingleton('core/design_package')->getTheme('skin')
Run Code Online (Sandbox Code Playgroud)

如果不以这种方式使用该方法将始终返回字符串'default'.

出乎意料的结果

使用不正确会产生逻辑错误.例如,如果您定义了"匹配表达式"以专门定位移动设备.

Mage::getSingleton('core/design_package')
Run Code Online (Sandbox Code Playgroud)

引用以下类

Mage_Core_Model_Design_Package
Run Code Online (Sandbox Code Playgroud)

通过查看此类中的'getTheme()'方法,您会发现可以通过此方法的可能选项,它们是'locale','layout','template','default'和'skin'.

因此,如果某个商店的"模板"具有"匹配表达式",如下所示

iPhone|iPod|Mobile|mobile > mobile
Run Code Online (Sandbox Code Playgroud)

可能发生以下情况

Mage::getSingleton('core/design_package')->getTheme('frontend') RETURNS 'default'
Mage::getSingleton('core/design_package')->getTheme('template') RETURNS 'mobile'
Run Code Online (Sandbox Code Playgroud)


Deu*_*777 9

以来

Mage::getSingleton('core/design_package')
Run Code Online (Sandbox Code Playgroud)

相当于

Mage::getDesign()
Run Code Online (Sandbox Code Playgroud)

德鲁的例子可以缩短为:

Mage::getDesign()->getPackageName()
Run Code Online (Sandbox Code Playgroud)

Mage::getDesign()->getTheme('frontend')
Run Code Online (Sandbox Code Playgroud)