如何在magento 2.0中获取当前活动主题
我在使用Magento 2.0时遇到麻烦。我必须使用在magento 1.x版本中获得的当前活动主题名称,如: Mage::getSingleton'core/design_package'->getPackageName如何在magento 2.0中获取当前活动主题,magento,magento-2.0,Magento,Magento 2.0,我在使用Magento 2.0时遇到麻烦。我必须使用在magento 1.x版本中获得的当前活动主题名称,如: Mage::getSingleton'core/design_package'->getPackageName 但是我没有得到任何Magento 2.0的替代品。请建议我应该使用什么型号或函数。getSingleton从magento 2中折旧,而不是此 $object_manager = Magento\Core\Model\ObjectManager::getInstance();
但是我没有得到任何Magento 2.0的替代品。请建议我应该使用什么型号或函数。getSingleton从magento 2中折旧,而不是此
$object_manager = Magento\Core\Model\ObjectManager::getInstance();
我找到了解决办法:
以下类需要具有依赖关系:
\Magento\Framework\App\Config\ScopeConfigInterface
\Magento\Store\Model\StoreManagerInterface
\Magento\Framework\View\Design\Theme\ThemeProviderInterface
使用此方法获取当前主题的数据:
public function getTheme()
{
$themeId = $this->_scopeConfig->getValue(
\Magento\Framework\View\DesignInterface::XML_PATH_THEME_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$this->_storeManager->getStore()->getId()
);
/** @var $theme \Magento\Framework\View\Design\ThemeInterface */
$theme = $this->_themeProvider->getThemeById($themeId);
return $theme->getData();
}
您可以使用以下示例获取Magento 2.0中的当前活动主题:
use Magento\Framework\View\DesignInterface;
$theme = $this->_design->getDesignTheme()
可以获取并检查当前主题,如-
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$appState = $objectManager->get('\Magento\Framework\View\DesignInterface');
if($appState->getDesignTheme()->getCode()=='Mgs/mgsmobile') {
var_dump('Theme is active');
}
第一个注入接口Magento\Framework\View\Design\Theme\ResolverInterface 在建
/** @var ThemeInterface $theme */
$theme = $this->themeResolver->get();
如果$theme上的值为null,请使用\Magento\Framework\View\Design\theme\ThemeProvider,而不是\Magento\Framework\View\Design\theme\ThemeProviderInterface