【问题标题】:How to get current active theme in magento 2.0如何在 magento 2.0 中获取当前活动主题
【发布时间】:2016-04-07 07:46:09
【问题描述】:

我在使用 Magento 2.0 时遇到问题。我必须使用在 magento 1.x 版本中获得的当前活动主题名称,例如:
“法师::getSingleton('core/design_package')->getPackageName()” 但是我没有得到任何 Magento 2.0 的替代品。请建议我应该使用什么型号或功能。

【问题讨论】:

    标签: magento magento-2.0


    【解决方案1】:

    您可以使用以下示例获取 Magento 2.0 中当前活动的主题:

    use Magento\Framework\View\DesignInterface;
    
    $theme = $this->_design->getDesignTheme()
    

    【讨论】:

      【解决方案2】:

      我找到了解决方案: 以下类需要有依赖:

      \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();
      }
      

      【讨论】:

      • 如果您在$theme 上获得null,请使用\Magento\Framework\View\Design\Theme\ThemeProvider 而不是\Magento\Framework\View\Design\Theme\ThemeProviderInterface
      【解决方案3】:

      可以获取和检查当前主题,例如 -

          $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
          $appState = $objectManager->get('\Magento\Framework\View\DesignInterface');
      
          if($appState->getDesignTheme()->getCode()=='Mgs/mgsmobile') {
              var_dump('Theme is active');
          }
      

      【讨论】:

        【解决方案4】:

        第一个注入接口 Magento\Framework\View\Design\Theme\ResolverInterface 在构造中

        /** @var ThemeInterface $theme */
        $theme = $this->themeResolver->get();
        

        【讨论】:

          【解决方案5】:

          getSingleton 从 magento 2 开始贬值,而不是这个

          $object_manager = Magento\Core\Model\ObjectManager::getInstance();
          

          http://magento-quickies.alanstorm.com/post/66167788899/magento-2-replacements-for-getmodel-and

          【讨论】:

            猜你喜欢
            • 2016-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-03
            • 2015-07-27
            • 2023-04-10
            相关资源
            最近更新 更多