我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

大家好,又和大家见面了。在上一篇文章中,苏南大叔描述了:thinkcmf的模版文件的制作方法中的非常基本部分。实际上,在thinkcmf中,还可以利用一个<同级同名>.json文件,来定义<同级同名>.html模版的相关配置信息。当然,这个<同级同名>.json文件,并不是必须存在的,但是作为thinkcmf的特有功能,还是值得学习学习研究的。

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - thinkcmf-json-hero
如何理解 thinkcmf 模板描述的 json 文件(图10-1)

后台管理模版配置

正常情况下来说,后台模板的相关配置能正常使用的前提是:你并没有修改默认模板文件的位置。也就是说,对应模板目录还是存在默认目录/public/themes/<your_theme_name>/之内。在后续的内容中,苏南大叔将讲述如何修复这个问题。

对于新增的json文件,我们需要先识别一下:

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_json_00
如何理解 thinkcmf 模板描述的 json 文件(图10-2)

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_json_01
如何理解 thinkcmf 模板描述的 json 文件(图10-3)

识别成功之后,就可以进入列表进行配置了。

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_json_02
如何理解 thinkcmf 模板描述的 json 文件(图10-4)

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_json_03
如何理解 thinkcmf 模板描述的 json 文件(图10-5)

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_json_04
如何理解 thinkcmf 模板描述的 json 文件(图10-6)

皮肤文件识别如果有什么问题的话,可以到数据库中寻找答案。相关数据表是<前缀>_theme<前缀>_theme_file

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_json_db
如何理解 thinkcmf 模板描述的 json 文件(图10-7)

在实际测试中,苏南大叔发现:如果开启了debug模式下的话,每次访问前台页面,都会调用thememodel里面的updatetheme方法,就是每次访问页面都会去检测刷新json文件。关闭debug模式的话,就没有这种情况发生。

define("APP_DEBUG", true);

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - auto_update
如何理解 thinkcmf 模板描述的 json 文件(图10-8)

自动加载到模板变量里的途径

这些json相关配置,自动加载到模板变量里的途径,见这个文件/cmf/controller/HomeBaseController.php中的fetch()方法:

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - theme_vars
如何理解 thinkcmf 模板描述的 json 文件(图10-9)

json范例

我们看一下默认皮肤下面的默认首页配置文件simpleboot3/portal/index.json

{
    "name": "首页",
    "action": "portal/Index/index",
    "description": "首页模板文件",
    "order": 5.0,
    "more": {
        "vars": {
            "top_slide": {
                "title": "顶部幻灯片",
                "value": "",
                "type": "text",
                "dataSource": {
                    "api": "admin/Slide/index",
                    "multi": false
                },
                "placeholder": "请选择顶部幻灯片",
                "tip": "顶部幻灯片",
                "rule": {
                    "require": true
                }
            }
        },
        "widgets": {
            "features": {
                "title": "快速了解ThinkCMF",
                "display": "1",
                "vars": {
                    "sub_title": {
                        "title": "副标题",
                        "value": "Quickly understand the ThinkCMF",
                        "type": "text",
                        "placeholder": "请输入副标题",
                        "tip": "",
                        "rule": {
                            "require": true
                        }
                    },
                    "features": {
                        "title": "特性介绍",
                        "value": [
                            {
                                "title": "MVC分层模式",
                                "icon": "bars",
                                "content": "使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),他不是一个新的概念,只是ThinkCMF将其发挥到了极致。"
                            },
                            {
                                "title": "用户管理",
                                "icon": "group",
                                "content": "ThinkCMF内置了灵活的用户管理方式,并可直接与第三方站点进行互联互通,如果你愿意甚至可以对单个用户或群体用户的行为进行记录及分享,为您的运营决策提供有效参考数据。"
                            },
                            {
                                "title": "云端部署",
                                "icon": "cloud",
                                "content": "通过驱动的方式可以轻松支持云平台的部署,让你的网站无缝迁移,内置已经支持SAE、BAE,正式版将对云端部署进行进一步优化。"
                            },
                            {
                                "title": "安全策略",
                                "icon": "heart",
                                "content": "提供的稳健的安全策略,包括备份恢复,容错,防治恶意攻击登陆,网页防篡改等多项安全管理功能,保证系统安全,可靠,稳定的运行。"
                            },
                            {
                                "title": "应用模块化",
                                "icon": "cubes",
                                "content": "提出全新的应用模式进行扩展,不管是你开发一个小功能还是一个全新的站点,在ThinkCMF中你只是增加了一个APP,每个独立运行互不影响,便于灵活扩展和二次开发。"
                            },
                            {
                                "title": "免费开源",
                                "icon": "certificate",
                                "content": "代码遵循Apache2开源协议,免费使用,对商业用户也无任何限制。"
                            }
                        ],
                        "type": "array",
                        "item": {
                            "title": {
                                "title": "标题",
                                "value": "",
                                "type": "text",
                                "rule": {
                                    "require": true
                                }
                            },
                            "icon": {
                                "title": "图标",
                                "value": "",
                                "type": "text"
                            },
                            "content": {
                                "title": "描述",
                                "value": "",
                                "type": "textarea"
                            }
                        },
                        "tip": ""

                    }
                }
            },
            "last_news": {
                "title": "最新资讯",
                "display": "1",
                "vars": {
                    "last_news_category_id": {
                        "title": "文章分类ID",
                        "value": "",
                        "type": "text",
                        "dataSource": {
                            "api": "portal/Category/index",
                            "multi": true
                        },
                        "placeholder": "请选择分类",
                        "tip": "",
                        "rule": {
                            "require": true
                        }
                    }
                }
            }
        }
    }
}

<模版同名>.json之变量

json定义:

"vars": {
    "varName1": {
        "title": "测试 text", /*后台设置时 input 的 label*/
        "value": "1", /*变量默认值*/
        "type": "text", /*变量类型*/
        "tip": "这是一个text", /*后台设置时 input 的 帮助提示*/
        "rule": { /*后台设置时 input 的 验证规则*/
            "require": true
        }
    }
}

模板内使用方式一:

{$theme_vars.varName1|default=''}

模板内使用方式二:

<php>
echo $theme_vars['varName1']; //记得要判断一下这个变量是否存在!
</php>

<模版同名>.json之控件

json定义:

"widgets": {
    "widgetName1": {
        "title": "所有组件演示",  /*模板控件标题,用于后台设置*/
        "display": "1", /*控件是否显示,1:显示;0:不显示*/
        "vars": {/*模板控件变量,和模板变量一样*/
            "text": {
                "title": "测试 text",
                "value": "1",
                "type": "text",
                "tip": "这是一个text",
                "rule": {
                    "require": true
                }
            }
        }
    }
}

模板内使用方式一:

<php>
if(isset($theme_widgets)){
    print_r($theme_widgets['widgetName1']);//记得要判断一下这个控件是否存在!
}
</php>

模板内使用方式二:

<widget name="widgetName1">
    <!--输出控件标题-->
    {$widget.title}
    <!--调用控件的变量-->
    {$widget.vars.varName1|default=''}
    或:
    <php>
        echo $widget['vars']['varName1'];//记得要判断一下这个变量是否存在!
    </php>
</widget>

<模版同名>.json文件里面的特殊属性值is_public

下面的配置信息来自:simpleboot3/public/config.json

{
    "name": "模板全局配置",
    "action": "public/Config",
    "description": "模板全局配置文件",
    "is_public": "1",/*默认值为0,开启后会在每个页面加载这个配置*/
    "order": 0.0,
    "more": {
        "vars": {
            "enable_mobile": {
                "title": "手机注册",
                "value": "ThinkCMF",
                "type": "select",
                "value": 1,
                "options": {
                    "1": "开启",
                    "0": "关闭"
                },
                "tip": ""
            }
        }
    }
}

用于表示这个配置是需要加载到每个模版文件中的,一般用于public文件夹下面的<模版同名>.json文件。使用方式请参见上面两条中关于变量和控件的说明文字。

函数变量模板

在模板里面输出变量的时候,您可能需要配合如下php函数,isset(),array_key_exists()

修改过后的json存储值

有必要说明一下,json数据的存储位置。否则会有些误会。

数据首先是保存在json文件里面的,在识别模板json的时候,就读取到数据库里面了。在后台修改之后,存储值也是在数据库里面的。如果在json里面做了修改,最终结果会合并到数据库里面的。新的项目会新增,老的已有数据不会覆盖。展示的时候,数据也是从数据库里面读取的。也就是说,json是起源,但是还是数据库里面起决定作用。

如果json文件删除了,再刷新模板的时候,相关数据库项目,也是会被删除的。相关的数据表为:<pre>_theme_file。如果有疑问的话,可以观测一下这个表的数据变化情况,就可以明白了。

苏南大叔:如何理解 thinkcmf 模板描述的 json 文件 - table
如何理解 thinkcmf 模板描述的 json 文件(图10-10)

关联文章

结论

thinkcmf很好很强大,这个模版的json文件配置功能,也是非常的不错。希望大家能够利用好这个功能。一些前台的不方便表述为数据库的功能,都可以通过这个<模版同名>.json文件进行定制。

更多thinkcmf的相关经验文章,请点击这里查看。https://newsn.net/tag/thinkcmf/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    theme