123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2013-2018 http://www.thinkcmf.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +---------------------------------------------------------------------
- // | Author: Dean <zxxjjforever@163.com>
- // +----------------------------------------------------------------------
- namespace cmf\controller;
- use think\Db;
- use admin\admin\model\ThemeModel;
- use think\View;
- class HomeBaseController extends BaseController
- {
- public function _initialize()
- {
- // 监听home_init
- hook('home_init');
- parent::_initialize();
- $siteInfo = cmf_get_site_info();
- View::share('site_info', $siteInfo);
- }
- public function _initializeView()
- {
- $cmfThemePath = config('cmf_theme_path');
- $cmfDefaultTheme = cmf_get_current_theme();
- $themePath = "{$cmfThemePath}{$cmfDefaultTheme}";
- $root = cmf_get_root();
- //使cdn设置生效
- $cdnSettings = cmf_get_option('cdn_settings');
- if (empty($cdnSettings['cdn_static_root'])) {
- $viewReplaceStr = [
- '__ROOT__' => $root,
- '__TMPL__' => "{$root}/{$themePath}",
- '__STATIC__' => "{$root}/static",
- '__WEB_ROOT__' => $root
- ];
- } else {
- $cdnStaticRoot = rtrim($cdnSettings['cdn_static_root'], '/');
- $viewReplaceStr = [
- '__ROOT__' => $root,
- '__TMPL__' => "{$cdnStaticRoot}/{$themePath}",
- '__STATIC__' => "{$cdnStaticRoot}/static",
- '__WEB_ROOT__' => $cdnStaticRoot
- ];
- }
- $viewReplaceStr = array_merge(config('view_replace_str'), $viewReplaceStr);
- config('template.view_base', "{$themePath}/");
- config('view_replace_str', $viewReplaceStr);
- $themeErrorTmpl = "{$themePath}/error.html";
- if (file_exists_case($themeErrorTmpl)) {
- config('dispatch_error_tmpl', $themeErrorTmpl);
- }
- $themeSuccessTmpl = "{$themePath}/success.html";
- if (file_exists_case($themeSuccessTmpl)) {
- config('dispatch_success_tmpl', $themeSuccessTmpl);
- }
- }
- /**
- * 加载模板输出
- * @access protected
- * @param string $template 模板文件名
- * @param array $vars 模板输出变量
- * @param array $replace 模板替换
- * @param array $config 模板参数
- * @return mixed
- */
- protected function fetch($template = '', $vars = [], $replace = [], $config = [])
- {
- $template = $this->parseTemplate($template);
- $more = $this->getThemeFileMore($template);
- $this->assign('theme_vars', $more['vars']);
- $this->assign('theme_widgets', $more['widgets']);
- return parent::fetch($template, $vars, $replace, $config);
- }
- /**
- * 自动定位模板文件
- * @access private
- * @param string $template 模板文件规则
- * @return string
- */
- private function parseTemplate($template)
- {
- // 分析模板文件规则
- $request = $this->request;
- // 获取视图根目录
- if (strpos($template, '@')) {
- // 跨模块调用
- list($module, $template) = explode('@', $template);
- }
- $viewBase = config('template.view_base');
- if ($viewBase) {
- // 基础视图目录
- $module = isset($module) ? $module : $request->module();
- $path = $viewBase . ($module ? $module . DS : '');
- } else {
- $path = isset($module) ? APP_PATH . $module . DS . 'view' . DS : config('template.view_path');
- }
- $depr = config('template.view_depr');
- if (0 !== strpos($template, '/')) {
- $template = str_replace(['/', ':'], $depr, $template);
- $controller = cmf_parse_name($request->controller());
- if ($controller) {
- if ('' == $template) {
- // 如果模板文件名为空 按照默认规则定位
- $template = str_replace('.', DS, $controller) . $depr . $request->action();
- } elseif (false === strpos($template, $depr)) {
- $template = str_replace('.', DS, $controller) . $depr . $template;
- }
- }
- } else {
- $template = str_replace(['/', ':'], $depr, substr($template, 1));
- }
- return $path . ltrim($template, '/') . '.' . ltrim(config('template.view_suffix'), '.');
- }
- /**
- * 获取模板文件变量
- * @param string $file
- * @param string $theme
- * @return array
- */
- private function getThemeFileMore($file, $theme = "")
- {
- //TODO 增加缓存
- $theme = empty($theme) ? cmf_get_current_theme() : $theme;
- // 调试模式下自动更新模板
- if (APP_DEBUG) {
- $themeModel = new ThemeModel();
- $themeModel->updateTheme($theme);
- }
- $themePath = config('cmf_theme_path');
- $file = str_replace('\\', '/', $file);
- $file = str_replace('//', '/', $file);
- $file = str_replace(['.html', '.php', $themePath . $theme . "/"], '', $file);
- $files = Db::name('theme_file')->field('more')->where(['theme' => $theme])->where(function ($query) use ($file) {
- $query->where(['is_public' => 1])->whereOr(['file' => $file]);
- })->select();
- $vars = [];
- $widgets = [];
- foreach ($files as $file) {
- $oldMore = json_decode($file['more'], true);
- if (!empty($oldMore['vars'])) {
- foreach ($oldMore['vars'] as $varName => $var) {
- $vars[$varName] = $var['value'];
- }
- }
- if (!empty($oldMore['widgets'])) {
- foreach ($oldMore['widgets'] as $widgetName => $widget) {
- $widgetVars = [];
- if (!empty($widget['vars'])) {
- foreach ($widget['vars'] as $varName => $var) {
- $widgetVars[$varName] = $var['value'];
- }
- }
- $widget['vars'] = $widgetVars;
- $widgets[$widgetName] = $widget;
- }
- }
- }
- return ['vars' => $vars, 'widgets' => $widgets];
- }
- public function checkUserLogin()
- {
- $userId = cmf_get_current_user_id();
- if (empty($userId)) {
- if ($this->request->isAjax()) {
- $this->error("您尚未登录", cmf_url("user/Login/index"));
- } else {
- $this->redirect(cmf_url("user/Login/index"));
- }
- }
- }
- }
|