thinkcmf5 模板版变量的加载过程

Posted djiz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkcmf5 模板版变量的加载过程相关的知识,希望对你有一定的参考价值。

在 HomeBaseController.php 的 fech方法

$more     = $this->getThemeFileMore($template);

用 

echo ThemeModel::getLastSql(); 输出sql语句  :SELECT `more` FROM `cmf_theme_file` WHERE `theme` = ‘w0s‘ AND ( `is_public` = 1 OR `file` = ‘portal/index‘ )  获取了声明公共配置和当前模板文件的模板配置。

可见,不管当前theme下那个模板文件配置,只要is_public=1,就可以加载vars 和 widgets 。
/**
     * 获取模板文件变量
     * @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();
        echo ThemeModel::getLastSql();
        $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];
    }

 

以上是关于thinkcmf5 模板版变量的加载过程的主要内容,如果未能解决你的问题,请参考以下文章

thinkcmf5更新模板代码分析,解决模板配置json出错导致数据库保存的配置项内容丢失问题

宝塔环境安装thinkcmf5 开启rewrite伪静态方法

[vscode]--HTML代码片段(基础版,reactvuejquery)

如何在导航抽屉活动模板中的片段之间传递字符串变量

微信小程序开发--模板(template)使用,数据加载,点击交互

Delphi7:快捷键