MisShop中建立页面所使用的模板,可以根据需要自己开发和修改。模板开发,跟页面类似,主要不同在于参数不一样,计算结果是设计器里的页面,而页面的计算结果才是网页。
创建模板时,单击导航区按钮模板,进入模板导航树,工作区和页面的工作区一样,都是在单元格中布置元素。

模板设计时的添加、删除、使用控件、布局等编辑功能与页面开发一致,相当于做一个通用的页面。
模板页面数据中,有@tl_table
参数,表示这个模板生成页面时,页面对应数据表的表名。在设计页面的添加页面时,选择了页面对应数据表,就自动把这个参数传到了页面。
参数中,以tl_
开头的参数,只在模板里使用,生成页面的时候,这个变量就没有了。所以,在模板里 tl_
开头的参数,都要用公式将它变成值,才能在设计器页面里显示,或者需要在添加页面的时候,手动设置,然后传输给模板,模板再以此生成页面。其他名称的变量,在生成页面时都能够保留。
我们来看看平台默认提供的列表模板,是怎么样配置的。
-
模板数据配置。在模板的数据变量配置中,能看到
tl_queryds
变量和tl_selectds
变量。
其中,tl_queryds
的初始化函数是:DataSet.parse(tl.getTableInfo(@tl_table, Constant.template.query_cols))
,表示在对应的表中,根据查询字段分组,找到的字段名、字段类型等表结构信息,tl_queryds.value
就表示字段名。
tl_selectds
的初始化函数是:DataSet.parse(tl.getTableInfo(@tl_table, Constant.template.list_cols).removeValue(tl.getTableDispColumn(@tl_table)).subList(3))
,表示根据列表字段分组查找到的表结构,包含字段名等信息。
其他变量如ds
、checked
、me
等数据变量,跟页面中的一样。ds
的泛型是template
,在生成页面时会改变成页面对应的数据表。 -
功能区
靠页面顶端主要是功能按钮,A1格的=" " +@tl_table+"列表"
,在页面中会变成如= 用户列表
,样式中设置为粗体,在最终效果中会显示这页的标题。B1格的增加、C1格的批量删除、D1格的导入、K1格的导出、L1格的折叠与展开,都是对应的控件,配置与页面中类似。
-
查询区
查询区显示了查询单表单和查询按钮。
A1格中的=tl_queryds.select(`tl_queryds.value`,,,,,,,3)
,表示按照字段名扩展,每3个为一组,这个格显示第一个。即每行显示3个,超过3个的往下换一行继续显示。系统取值时会3个同时取出来,后边的再根据偏差到这个里面取值。
B1格的=ifv(tl_queryds.value!=null,"=query.ds."+tl_queryds.value,"")
,表示如果tl_queryds.value
的结果不为空,则把这个格子的值设置为=query.ds.字段名
,在最终页面中就会显示为输入查询条件的输入框。
后面的D2、G2格的=dsoff(tl_queryds.value,1)
,=dsoff(tl_queryds.value,2)
,表示获得这个字段分组中下一个字段名。
后面的E2、H2格的=ifv(dsoff(tl_queryds.value,1)!=null,"=query.ds."+dsoff(tl_queryds.value,1),"")
、=ifv(dsoff(tl_queryds.value,2)!=null,"=query.ds."+dsoff(tl_queryds.value,2),"")
表示设置这个格子的值为相应的=query.ds.字段名
。其中,高级属性中上主格都设置为A2,表示随A2而变。
列可以为空表示这一列有内容时,右边的单元格向右偏移。横向侵占表示这一列有内容时,把右侧的单元格占领。
第三行的查询按钮与页面一样,启动查询。 -
列表区
列表区以表格形式显示数据表中的记录。其中第四行是显示表格的标题,第五行是显示数据。
A4格是id,是固定值,在设计器页面和浏览器页面都显示一样的。
A5格值="=ds.select(ds.id)"
是固定的,用于生成扩展显示每个记录id的公式=ds.select(ds.id)
。
B4格是全选框,B5格是复选框,都是跟checked
变量绑定。
C4格=tl.getTableDispColumn(@tl_table)
是显示数据表的显示字段的字段名,默认是名称字段,C5格="=ds."+tl.getTableDispColumn(@tl_table)
是生成显示名称字段数据的公式。
D4格=tl_selectds.select(tl_selectds.value)
是显示数据表字段名,D5格是=ifv(tl_selectds.value!=null,"=ds."+tl_selectds.value,"")
显示其他字段的数据。此时注意tl_selectds
变量的定义中已经移除掉了名称字段,所以D4格不会显示,而D3格我们手动加上了名称字段。D4单元格高级属性为横向侵占,表示D4单元格的公式出来几个字段就向右方侵占多少个格子,而J4、J5单元格的高级属性中有个占位属性设置为列可以为空,表示扩展到这的时候,这个格会不断复制,向右推移,而如果列的所有单元格值都为空,则这一列将被删掉。
同时,C5、K5单元格控件属性为链接,点击会跳转到详情页面,链接的控件属性中,链接目标也是模板,传递参数ds.id
是固定值。L5单元格控件属性为删除数据,点击后会删除该行数据。
在C4、C5基本属性的格名一栏公式为tl.calcStaticProperty("head_ds."+tl_selectds.value)
和tl.calcStaticProperty("ds."+tl_selectds.value)
,表示在生成页面的格名属性中,设置静态值为ds.字段名
。如果公式为tl.calcExp("ds."+tl_selectds.value)
,生成的值会放在格名属性的公式一列,会在页面生成网页时动态计算。格名是代表这个单元格,例如目前常用A3、C5表示这个单元格,以后也可以用格名表示单元格,格名的功能暂时未用。 -
分页控件
第六行是一个分页控件,用于对表格中的数据分页显示。
编辑模板与列表模板类似,定义了tl_fields
和tl_longfields
变量集,获得数据表的字段名。其中tl_fields
定义是DataSet.parse(AuxTable.getCols(@tl_table,[Constant.subtype.shorttext,Constant.subtype.password,Constant.type.number,Constant.type.date,Constant.type.logic,Constant.type.selection,Constant.type.reference,Constant.type.attachment]).removeAll(["id","wx_openid","mis_valid"]))
,表示获得大部分字段的字段名。
tl_longfields
定义为DataSet.parse(AuxTable.getCols(@tl_table,[Constant.subtype.longtext,Constant.subtype.html]))
,表示获得字段类型为长文本或html的字段名。
网友评论