12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- /**
- * Created by PhpStorm.
- * Author: NODELOG
- * DateTime: 2017/7/10 13:46
- * Description:
- */
- namespace common\modules\theme;
- use Detection\MobileDetect;
- use Yii;
- use yii\base\BootstrapInterface;
- class Module extends \common\modules\Module implements BootstrapInterface
- {
- public function bootstrap($app)
- {
- if ($app->id == 'frontend') {
- $themeName = $this->resolveTheme();
- $this->setTheme($themeName);
- }
- }
- public $themeParam = 'theme';
- public $themeCookieName = 'localThemeName';
- public function resolveTheme()
- {
- //先看参数
- if (!$themeName = Yii::$app->request->get($this->themeParam)) {
- //再检查cookie
- if (Yii::$app->request->cookies->has($this->themeCookieName)) {
- $themeName = Yii::$app->request->cookies->get($this->themeCookieName);
- } else {
- //最后读系统默认
- $isMobile = (new MobileDetect())->isMobile();
- if ($isMobile) {
- $themeName = \Yii::$app->config->get('mobile_theme_name', 'basic');
- } else {
- $themeName = \Yii::$app->config->get('theme_name', 'basic');
- }
- }
- }
- return $themeName;
- }
- public function setTheme($themeName)
- {
- $theme = [
- 'class' => 'yii\base\Theme',
- 'basePath' => '@frontend/themes/' . $themeName,
- 'baseUrl' => '@web/themes/' . $themeName,
- 'pathMap' => [
- '@frontend/views' => [
- '@frontend/themes/' . $themeName,
- '@frontend/themes/basic',
- ],
- '@frontend/widgets' => [
- '@frontend/themes/' . $themeName . '/widgets',
- '@frontend/themes/basic/widgets'
- ],
- '@common/modules' => [
- '@frontend/themes/' . $themeName . '/modules',
- '@frontend/themes/basic/modules',
- ],
- ],
- ];
- \Yii::$app->view->theme = \Yii::createObject($theme);
- // p(\Yii::$app->view->theme);
- if (class_exists('frontend\\themes\\' . $themeName . '\\Theme')) {
- $themeClass = Yii::createObject('frontend\\themes\\' . $themeName . '\\Theme');
- if (method_exists($themeClass, 'bootstrap')) {
- $themeClass->bootstrap();
- }
- }
- }
- }
|