如何理解 thinkcmf 模板描述的 json 文件
发布于 作者:苏南大叔 来源:程序如此灵动~大家好,又和大家见面了。在上一篇文章中,苏南大叔描述了:thinkcmf
的模版文件的制作方法中的非常基本部分。实际上,在thinkcmf
中,还可以利用一个<同级同名>.json
文件,来定义<同级同名>.html
模版的相关配置信息。当然,这个<同级同名>.json
文件,并不是必须存在的,但是作为thinkcmf
的特有功能,还是值得学习学习研究的。
后台管理模版配置
正常情况下来说,后台模板的相关配置能正常使用的前提是:你并没有修改默认模板文件的位置。也就是说,对应模板目录还是存在默认目录/public/themes/<your_theme_name>/
之内。在后续的内容中,苏南大叔将讲述如何修复这个问题。
对于新增的json文件,我们需要先识别一下:
识别成功之后,就可以进入列表进行配置了。
皮肤文件识别如果有什么问题的话,可以到数据库中寻找答案。相关数据表是<前缀>_theme
和<前缀>_theme_file
。
在实际测试中,苏南大叔发现:如果开启了debug模式下的话,每次访问前台页面,都会调用thememodel
里面的updatetheme
方法,就是每次访问页面都会去检测刷新json文件。关闭debug模式的话,就没有这种情况发生。
define("APP_DEBUG", true);
自动加载到模板变量里的途径
这些json相关配置,自动加载到模板变量里的途径,见这个文件/cmf/controller/HomeBaseController.php
中的fetch()
方法:
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的皮肤风格》 https://newsn.net/say/thinkcmf-theme.html
- 《thinkcmf如何新建或修改皮肤页面》 https://newsn.net/say/thinkcmf-theme-page.html
- 《json文件的thinkcmf官方说明》 https://www.kancloud.cn/thinkcmf/doc/289674
结论
thinkcmf很好很强大,这个模版的json文件配置功能,也是非常的不错。希望大家能够利用好这个功能。一些前台的不方便表述为数据库的功能,都可以通过这个<模版同名>.json
文件进行定制。
更多thinkcmf的相关经验文章,请点击这里查看。https://newsn.net/tag/thinkcmf/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。