一、标签语法
DTcms 模板语法和C#非常接近,在3.0版本中,进一步对标签语法做了改进,目的是为了更加符合技术开发人员的编程习惯。如果你是一名程序员,下面的语法我相信只需要看一次便可牢牢记住各种标签的使用规则,所以你不必担心DTcms模板难掌握。如果非程序员,难度有所加大,毕竟我们考虑到了整个系统的扩展性和二次开发,所以比较偏向于技术开发人员。
1.1 页面嵌入与模板路径
1.1.1 页面嵌套标签
如果想在一个模板页面中嵌入另一个模板页的内容可使用该标签,注意避免被嵌套的页面嵌套主模板页,这样会造成迭代循环。另外,嵌套的深度最多只能5层。其中src所指定的路径为当前相对路径,如src="common/_header.html"
<!--一般在当前模板下使用可下面的嵌套标签--> <%template src="模板页面相对路径"%> <!--如需跨模板访问可使用下面的嵌套标签,一般插件模板使用较多,前提该模板须存在,否则访问不到--> <%template skin="模板目录名" src="模板页面相对路径"%>
1.1.2 当前模板路径标签
因为3.0版本中增加分站的功能,所以这里和2.1及前版本的模板标签有所不同。输出不包含/,如:templates/green/images/logo.png,同一模板目录下使用第一个种标签即可
<!--当前模板路径标签--> <%templateskin%> <!--访问其它模板的路径标签,前提该模板须存在--> <%templateskin="模板目录名"%>
1.1.3 嵌入C#代码标签
如果其它标签无法实际你想要的效果,你可以试一下直接写C#代码,如意不能使用Response.Write
<%csharp%> //C#代码 <%/csharp%>
1.1.4 引用命名空间标签
如果需要引用命名空间则需要使用该标签,注意此标签不能放在嵌套的页面且需要放置在模板页的最顶部
<!--示例:<%namespace "DTcms.BLL"%>--> <%namespace "命名空间"%>
1.2 普通及数据变量
1.2.1 普通变量标签
模板页的变量概念实际上就是C#的变量,在模板页调用时需加上大括号,这里往往和模板页的JS的方法体互相冲突,所以在写JS时,遇到大括号一定要换行。
<!--直接变量--> {varname} <!--实体变量,如:{config.webname}--> {var.item}
1.2.2 数据变量标签
数据变量一般在循环列表时使用到,另外在显示内容时也会用到
<!--循环列表时的数据变量,如:{dr[title]}--> {var[...]} <!--显示实体数据变量,如:model.fields[title]--> {var.item[...]}
1.3 循环判断语句
1.3.1 loop循环标签
loop循环标签主要是数据列表中使用的,其中自带有行号变量datarow__loop__id,该变量是从1开始
参数说明:
datarow:DataRow类型的变量,同一页面内不可重复,否则编译出错
datatable:DataTable类型的变量,使用前请确保该参数已声明赋值
<!--loop循环标签--> <%loop datarow datatable%> ... <%/loop%>
1.3.2 foreach循环标签
foreach标签和C#的语法是一样的,写法也差不多,相信技术人员一看就懂。注意与loop标签不同的是它没有自带的行号变量,需要手动声明。
参数说明:
type:数据类型,如DataRow
item:数据类型的变量名,自定义变量名
list:数组、结构、对象、引用类型
<!--foreach循环标签--> <%foreach(type item in list)%> ... <%/foreach%>
1.3.3 for循环标签
for标签和C#的语法也是一样的,一般很少用到。
参数说明:
i:整型变量
count:整型变量
<!--for循环标签--> <%for(int i=0;i<=count;i++)%> ... <%/for%>
1.3.4 if判断语句标签
if判断语句与C#的语法一样,3.0支持二种写法,保留旧的写法
<!--第一种格式写法(推荐)--> <%if(...)%> ... <%else if(...)%> ... <%/if%> <!--第二种格式写法(旧写法)--> <%if ...%> ... <%else if ...%> ... <%/if%>
1.3.5 continue退出当前循环标签
循环标签中分支用以结束当前循环,直接进入下一次循环的标签,使用方式同传统程序一致。
<!--continue标签--> <%continue%> <!--使用示例,当i等于5时退回并进入下一条循环--> <%for(int i=0;i<=count;i++)%> <%if(i==5)%> <%continue%> <%/if%> <%/for%>
1.3.6 break结束循环标签
在循环标签中用以结束循环,进入后续程序的标签,使用方式同传统程序一致 。
<!--break标签--> <%break%> <!--使用示例,当i大于5时结束循环--> <%for(int i=0;i<=count;i++)%> <%if(i>5)%> <%break%> <%/if%> <%/for%>
1.4 获取传参、截取字符串、格式转换标签
1.4.1 获取GET传输参数标签
获取URL地址GET传输的参数值
<!--request标签,varname为参数名--> {request[varname]}
1.4.2 截取字符串长度标签
当一个字符串的长度大于你想要的值时可使用该标签
参数说明:
num:int类型,字符串长度
<!--cutstring标签,{...}为变量--> <%cutstring({...},num)%>
1.4.3 日期格式转换标签
把日期字符串转换成你想要的格式
参数说明:
strFormat:日期格式
<!--datetostr标签,{...}为变量--> <%datetostr({...},strFormat)%> <!--示例一:输出年月日格式的日期--> <%datetostr({varname},yyyy年MM月dd日)%> <!--示例二:输出年月日时分秒格式的日期--> <%datetostr({varname},yyyy年MM月dd日HH时mm分ss秒)%>
1.4.4 整型格式转换标签
当一个字符串的想转换成一个整型的数字时可使用该标签
<!--strtoint标签,{...}为字符串变量--> {strtoint({...})}
1.4.5 直接输出内容标签
当一个方法返回的是字符串内容,而我们又想直接在模板页中直接输出可使用该标签。该标签支持两种写法,推荐用第一种。
<!--第一种写法(推荐)--> <%=方法名(参数一,参数二,...)%> <!--第二种写法(旧写法)--> <%write 方法名(参数一,参数二,...)%>
1.5 声明变量与赋值标签
和C#语法基本一致,需要声明或在需要接受一个方法返回的内容时可以使用该标签。
参数说明:
type:可选,变量的类型,如果有type则首先创建对象再赋值,否则直接赋值
ref:变量名,同一页面内不可重复
expression:变量、常量或方法都可以
<!--第一种写法(推荐)--> <%set [type] ref=expression%> <!--示例一--> <%set int num=1%> <!--再次使用时不用再声明--> <%set num=2%> <!--示例二--> <%set DataTable dt=get_list(参数一,参数二,...)%>
<!--第二种写法(旧写法)--> <%set [(type)]{ref}=expression%> <!--示例一--> <%set (int){num}=1%> <!--再次使用时不用再声明--> <%set {num}=2%> <!--示例二--> <%set (DataTable){dt}=get_list(参数一,参数二,...)%>
二、通用标签
通用标签在所有模板页面都可以使用,如果您下载的是DTcms的源码版,请查看DTcms.Web.UI项目下的Label文件夹,如果默认标签不够用的情况下,你也可以在里面新增一些自定义的标签,但记住编译一下整个项目哦!
2.1 站点配置标签(变量)
站点配置的一些信息,实际上是源码DTcms.Model项目中的sys_config.cs里面的属性,里面都有详细的备注与注释
标签 | 描述 | 示例 |
---|---|---|
{config.webname} | 网站名称 | 动力启航 |
{config.weburl} | 网站域名 | http://demo.dtcms.net |
{config.weblogo} | 网站LOGO | /upload/20131220/201312203234212.png |
{config.webcompany} | 公司名称 | XX软件有限公司 |
{config.webaddress} | 公司地址 | XX省XX市XX区XX号 |
{config.webtel} | 联系电话 | 020-22255432 |
{config.webfax} | 传真号码 | 020-22255432 |
{config.webmail} | 管理员邮箱 | info@abc.com |
{config.webcrod} | 网站备案号 | 粤TC/ICP备XX号 |
{config.webtitle} | 网站首页标题 | DTcms网站内容管理系统 |
{config.webkeyword} | 页面关健词,255字符内 | asp.net开源,C#开源 |
{config.webdescription} | 页面描述,255字符内 | DTcms 100%开源的CMS |
{config.webcopyright} | 网站版权信息,支持HTML | 版权所有 动力启航 |
{config.webpath} | 网站安装目录,/代表放在根目录 | / |
{config.webmanagepath} | 网站后台管理目录 | admin |
{config.staticstatus} | 是否开启生成静态,0不开启,1伪静态,2全静态 | 1 |
{config.staticextension} | 生成静态扩展名 | html |
{config.mobilestatus} | 手机网站状态,0关闭1开启 | 1 |
{config.mobiledomain} | 手机网站绑定域名 | m.dtcms.net |
{config.memberstatus} | 开启会员功能,0不开启,1开启 | 1 |
{config.commentstatus} | 开启评论审核,0不审核,1开启审核机制 | 0 |
{config.logstatus} | 后台管理日志,0关闭,1开启 | 1 |
{config.webstatus} | 是否关闭网站,0正常,1关闭 | 0 |
{config.webclosereason} | 网站关闭原因描述 | 网站正在维护,请稍候访问... |
{config.webcountcode} | 网站统计代码,支持HTML | <script>...</script> |
{config.smsapiurl} | 短信API地址 | http://... |
{config.smsusername} | 短信平台登录账户名 | test |
{config.smspassword} | 短信平台登录密码,MD5加密字符串 | a34de42fededferkc63fe |
{config.smsnickname} | 手机短信签名 | 动力启航 |
{config.emailsmtp} | 邮件STMP服务器 | smtp.163.com |
{config.emailport} | 邮件SMTP端口 | 25 |
{config.emailfrom} | 发件人地址 | service@abc.com |
{config.emailusername} | 邮箱账号 | info@abc.com |
{config.emailpassword} | 邮箱密码,内置加密算法 | |
{config.emailnickname} | 发件人昵称 | 网站管理员 |
{config.filepath} | 附件上传目录名 | upload |
{config.filesave} | 附件保存方式,1按年月日保存,2按年月/日/保存 | 1 |
{config.fileextension} | 附件上传类型,以逗号分隔开 | gif,png,doc |
{config.attachsize} | 文件上传大小,单位为KB | 2048 |
{config.imgsize} | 图片上传大小,单位为KB | 1024 |
{config.imgmaxheight} | 图片最大高度(像素) | 1024 |
{config.imgmaxwidth} | 图片最大宽度(像素) | 1024 |
{config.thumbnailheight} | 生成缩略图高度(像素) | 1024 |
{config.thumbnailwidth} | 生成缩略图宽度(像素) | 1024 |
{config.watermarktype} | 图片水印类型,0关闭,1文字,2图片 | 1 |
{config.watermarkposition} | 图片水印位置,1-9 | 9 |
{config.watermarkimgquality} | 图片生成质量,0-100 | 80 |
{config.watermarkpic} | 图片水印文件 | watermark.png |
{config.watermarktransparency} | 水印透明度,1-10 | 5 |
{config.watermarktext} | 水印文字 | 动力启航 |
{config.watermarkfont} | 文字字体 | Arial |
{config.watermarkfontsize} | 水印文字大小(像素) | 12 |
2.2 全局通用标签(方法)
位于DTcms.Web.UI/BasePage.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法
2.2.1 统一链接标签
主要对DTcms.Web\xmlconfig\urls.config文件里的节点读取和匹配。
参数说明:
key:URL配置的名称
params:Object参数列表
<%linkurl(key,params)%> <!--示例一:首页链接--> <%linkurl("index")%> <!--示例二:关于我们链接--> <%linkurl("content","about")%>
2.2.2 分页页码标签
输入分页页码按钮链接,需要和pagination.css一起使用。
参数说明:
pagesize:每页显示条数
pageindex:当前页码
totalcount:总记录数
key:URL配置的名称
params: Object参数列表
get_page_link(pagesize, pageindex, totalcount, key, params)
<!--示例一:列表分页,其中“__id__”为页码数字,系统自动替换--> <%set string pagelist=get_list(12,page,totalcount,"news_list", category_id, "__id__")%> <!--放置页码列表,class="flickr"里面的样式可以修改成不同的23种风格--> <div class="flickr">{pagelist}</div>
2.2.3 调用插件列表标签
主要用于主模板面调用插件方法,为了防止插件卸载后页面出错,建立使用该方法调用。
参数说明:
assemblyName:命名空间全局限定名
className:类名
methodName:方法名称
params:Object参数
get_plugin_method(assemblyName, className, methodName, params)
<!--示例一:输出留言插件列表的最新4条留言信息--> <%set DataTable flist=get_plugin_method("DTcms.Web.Plugin.Feedback", "feedback", "get_feedback_list", 4, "is_lock=0")%> <!--使用foreach循环输出--> <%foreach(DataRow dr in flist.Rows)%> 留言标题:{dr[title]} <%/foreach%>
2.3 频道调用标签(方法)
位于DTcms.Web.UI/Label/article.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法
频道列表页已声明变量:
page(当前页码)、category_id(当前类别ID)、totalcount(数据的总记录)、pagelist(分页字符串),可直接使用这些变量
频道详细页已声明变量:
id(当前文章ID)、call_index(调用别名)、model(当前文章Model实体类,可查阅数据字典),可直接使用这些变量
2.3.1 查询最新文章列表标签
可根据条件查询前几条最新文章列表,用循环语句输出。
参数说明:
channel_name:频道名称
top:显示的条数,0为显示所有
strwhere:SQL查询语句
get_article_list(channel_name, top, strwhere)
<!--示例一:显示新闻频道最新8条信息,新闻频道的名称为“news”--> <%set DataTable nlist=get_article_list("news", 8, "status=0")%> <!--使用foreach循环输出--> <%foreach(DataRow dr in nlist.Rows)%> 新闻标题:{dr[title]} <%/foreach%> <!--示例二:显示新闻频道最新推荐8条信息,新闻频道的名称为“news”--> <%set DataTable nlist=get_article_list("news", 8, "status=0 and is_red=1")%> <!--使用foreach循环输出--> <%foreach(DataRow dr in nlist.Rows)%> 新闻标题:{dr[title]} <%/foreach%>
2.3.2 按分类查询最新文章列表标签
可根据分类ID与条件查询前几条最新文章列表,用循环语句输出。
参数说明:
channel_name:频道名称
category_id:栏目分类ID
top:显示的条数,0为显示所有
strwhere:SQL查询语句
get_article_list(channel_name, category_id, top, strwhere)
<!--示例一:显示新闻频道分类ID为1的最新8条信息--> <%set DataTable nlist=get_article_list("news", 1, 8, "status=0")%> <!--使用foreach循环输出--> <%foreach(DataRow dr in nlist.Rows)%> 新闻标题:{dr[title]} <%/foreach%> <!--示例二:查询新闻频道分类ID为1的最新8条信息,只显示前4条--> <%set DataTable nlist=get_article_list("news", 8, "status=0")%> <!--使用loop循环输出--> <%loop ndr nlist%> <%if(ndr__loop__id>4)%> <%break%> <%/if%> 新闻标题:{ndr[title]} <%/loop%>
2.3.3 查询并排序文章列表标签
可根据分类ID与条件查询前几条最新文章列表并进行排序,用循环语句输出。
参数说明:
channel_name:频道名称
category_id:栏目分类ID,0显示所有分类
top:显示的条数,0为显示所有
strwhere:SQL查询语句
orderby:SQL排序语句,asc顺序desc倒序
get_article_list(channel_name, category_id, top, strwhere, orderby)
<!--示例一:查询新闻频道分类ID为1的8条信息,按字段sort_id数字倒序排序--> <%set DataTable nlist=get_article_list("news", 1, 8, "status=0", "sort_id desc")%> <!--使用foreach循环输出--> <%foreach(DataRow dr in nlist.Rows)%> 新闻标题:{dr[title]} <%/foreach%>
2.3.4 文章列表分页标签
此标签只允许在频道列表页中使用,分页需结合pagination.css。
参数说明:
channel_name:频道名称
category_id:栏目分类ID,0显示所有分类
page_index:当前页码,系统默认为page
strwhere:SQL查询语句
totalcount:数据总数,系统默认为totalcount
pagelist:分页字符串变量,系统默认为pagelist
key:URL配置名称
params:URL传输参数
get_article_list(channel_name, category_id, page_index, strwhere, totalcount, pagelist, key, params)
<!--示例一:查询新闻频道分类ID为1的所有记录--> <%set DataTable nlist=get_article_list("news", 1, page, "status=0", totalcount, pagelist, "news_list", category_id, "__id__")%> <!--使用foreach循环输出--> <%foreach(DataRow dr in nlist.Rows)%> 新闻标题:{dr[title]} <%/foreach%>
2.3.5 根据调用别名取得内容标签
此标签适用于单页,在只需要显示该文单详细内容时使用。
参数说明:
call_index:该条文章的调用别名,string类型
get_article_content(call_index)
<!--示例一:输出关于我们单页的内容--> <%=get_article_content("about")%>
2.3.6 根据文章的ID返回图片路径标签
此标签适用于只知道文章的ID情况下想得到该文章的图片路径。
参数说明:
article_id:文章ID,int类型
get_article_img_url(article_id)
<!--示例:显示文章ID为5的图片--> <img src="<%=get_article_img_url(5)%>" />
2.3.7 返回对应商品的会员价格标签
使用此标签时会判断当前用户是否登录,如尚未登录则返回-1。
参数说明:
article_id:文章ID,int类型
get_user_article_price(article_id)
<!--示例:显示商品文章ID为5的当前会员价格--> 会员价格:<%=get_user_article_price(5)%>
2.4 类别调用标签(方法)
位于DTcms.Web.UI/Label/category.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法
2.4.1 返回当前类别名称标签
一般用于频道列表页或者详细页,可根据类别ID查找类别的标题。
参数说明:
category_id:栏目ID,int类型
default_value:默认值,当该类别不存在时显示默认值,string类型
get_category_title(category_id, default_value)
<!--示例:在文章详细页中显示当前文章的类别名称,model是实体--> 当前类别:<%=get_category_title(model.category_id, "所有类别")%>
2.4.2 返回类别一个实体类标签
此标签适用于只知道类别ID想查找该类别的其它信息时使用,返回类型为DTcms.Model.article_category。
参数说明:
category_id:栏目ID,int类型
get_category_model(category_id)
<!--示例:查找类别ID为5的其它属性信息--> <%set DTcms.Model.article_category cmodel=get_category_model(5)%> <%if(cmodel!=null)%> 类别名称:{cmodel.title} 类别SEO标题:{cmodel.seo_title} <%/if%>
2.4.3 返回类别面包屑导航标签
此标签适用于频道的列表页或详细页,根据当前的类别ID显示面包屑导航。
参数说明:
urlKey:url配置的名称,string类型
category_id:栏目ID,int类型
get_category_menu(url_key, category_id)
<!--示例:根据当前URL配置名为news_list和类别ID变量为category_id输出面包屑导航--> <%=get_category_menu("news_list", category_id)%>
2.4.4 类别列表标签
显示该类别下所有的子类别,当父类别的ID为0时显示该频道所有类别,以循环输出。
参数说明:
channel_name:当前频道的名称,string类型
parent_id:父类别的ID,0为所有类别,int类型
get_category_list(channel_name, parent_id)
<!--示例一:显示频道名称为news的所有类别--> <%set DataTable dt=get_category_list("news", 0)%> <%foreach(DataRow dr in dt.Rows)%> 类别名称:{dr[title]} <%/foreach%> <!--示例二:显示频道名称为news,父类别ID为5的所有子类别--> <%set DataTable dt=get_category_list("news", 5)%> <%foreach(DataRow dr in dt.Rows)%> 类别名称:{dr[title]} <%/foreach%>
2.4.5 类别列表(只显示一级分类)标签
根据父ID查询子类别列表,注意只返回一层,不查找子类的子类,以循环输出。
参数说明:
channel_name:当前频道的名称,string类型
parent_id:父类别的ID,0为顶级分类,int类型
get_category_child_list(channel_name, parent_id)
<!--示例:根据当前的类别父ID为5,输出子类别下二层子分类--> <%set DataTable dt=get_category_child_list("news", 0)%> <%foreach(DataRow dr in dt.Rows)%> 二级类别名称:{dr[title]} <!--注意:这里根据二级类别ID查找下级类别,其中用到了将字符串转换为整型的标签--> <%set DataTable dt2=get_category_child_list("news", {strtoint({dr[id]})})%> <%foreach(DataRow dr2 in dt2.Rows)%> 三级类别名称:{dr2[title]} <%/foreach%> <%/foreach%>
2.5 评论调用标签(方法)
位于DTcms.Web.UI/Label/article_comment.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法
2.5.1 返回评论数据总数标签
根据当前文章的ID查询该文章的评论总数。
参数说明:
article_id:当前文章ID,int类型
strwhere:SQL查询语句
get_comment_count(article_id, strwhere)
<!--示例:输出当前文章ID为5的评论总数--> 评论总数:<%=get_comment_count(5, "is_lock=0")%>
2.5.2 评论列表标签
根据条件显示前几条评论列表,用循环输出。
参数说明:
article_id: 当前文章ID,int类型
top:显示条数,为0时显示所有,int类型
strwhere: SQL查询语句
get_comment_list(article_id, top, strwhere)
<!--示例:当前文章ID为5,输出前8条最新评论内容--> <%set DataTable dt=get_comment_list(5, 8, "is_lock=0")%> <%loop dr dt%> 第{dr__loop__id}楼:{dr[content]} <%/loop%>
2.5.3 评论分页列表标签
根据条件显示当前页的评论列表,用循环输出,一般情况下很少使用到该标签。
参数说明:
article_id: 当前文章ID,int类型
page_size:每页显示的记录数量,int类型
page_index:当前的页码,int类型
strwhere: SQL查询语句
totalcount: 数据总记录数
get_comment_list(article_id, page_size, page_index, strwhere, out totalcount)
<!--示例:当前文章ID为5,每页为10条记录,输出第一页评论列表--> <%set int totalcount=0%> <%set DataTable dt=get_comment_list(5, 10, 1, "is_lock=0", out totalcount)%> <%loop dr dt%> 第{dr__loop__id}楼:{dr[content]} <%/loop%>
2.6 会员调用标签(方法)
位于DTcms.Web.UI/Label/users.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法。
2.6.1 第三方登录应用列表标签
适用于在会员登录模板页面列出所有的第三方登录方式应用列表供用户选择
参数说明:
top: 显示条数,0为显示所有,int类型
strwhere: SQL查询语句
get_oauth_app_list(top, strwhere)
<!--示例:显示所有可用的第三方登录按钮--> <%set DataTable olist=get_oauth_app_list(0, "")%> <%foreach(DataRow dr in olist.Rows)%> <a title="{dr[title]}" href="{config.webpath}api/oauth/{dr[api_path]}/index.aspx"> <img src="{dr[img_url]}" /> </a> <%/foreach%>
2.6.2 根据用户名显示头像路径标签
适用于在会员模板页面根据用户名显示头像。
参数说明:
user_name: 用户名,string类型
get_user_avatar(user_name)
<!--示例:显示用户名为test的头像--> <img src="<%=get_user_avatar("test")%>" />
2.6.3 统计短消息数量标签
根据SQL查询条件返回对应的短消息总记录数,相关字段说明请查阅DTcms.Model/user_message.cs类文件。
参数说明:
strwhere: SQL查询语句
get_user_message_count(strwhere)
<!--示例:显示用户名为test的短消息记录总数--> 未读短消息:<%=get_user_message_count("type<3 and is_read=0 and accept_user_name='test'")%>条 已读短消息:<%=get_user_message_count("type<3 and is_read=1 and accept_user_name='test'")%>条
2.6.4 短消息列表标签
根据SQL查询条件返回对应的短消息列表,用循环输出。
参数说明:
top: 显示条数,0为显示所有,int类型
strwhere: SQL查询语句
get_user_message_list(top, strwhere)
<!--示例:显示用户名为test的未读短消息列表--> <%set DataTable dt=get_user_message_list(0, "type<3 and is_read=0 and accept_user_name='test'")%> <%foreach(DataRow dr in dt.Rows)%> 短消息标题:{dr[title]} <%/foreach%>
2.6.5 短信息分页列表标签
根据SQL查询条件返回对应的短消息分页列表,用循环输出。
参数说明:
page_size: 每页显示条数,int类型
page_index: 当前页码,int类型
strwhere: SQL查询语句
totalcount: 记录总数,out参数,int类型
get_user_message_list(page_size, page_index, strwhere, out totalcount)
<!--示例:显示用户名为test短消息收件箱列表--> <!--取得一个DataTable,page为当前页码变量,totalcount为已声明的变量--> <%set DataTable dt=get_user_message_list(10, page, "accept_user_name='test' and type=2", out totalcount)%> <!--取得分页页码列表,action为变量,相关说明请查阅get_page_link分页标签--> <%set string pagelist=get_page_link(10, page, totalcount, "usermessage", action, "__id__")%> <!--使用循环输出--> <%foreach(DataRow dr in dt.Rows)%> 短消息标题:{dr[title]} <%/foreach%> 记录总数:{totalcount} 页码:{pagelist}
2.6.6 积分明细分页列表标签
根据SQL查询条件返回对应的积分明细分页列表,用循环输出。
参数说明:
page_size: 每页显示条数,int类型
page_index: 当前页码,int类型
strwhere: SQL查询语句
totalcount: 记录总数,out参数,int类型
get_user_point_list(page_size, page_index, strwhere, out totalcount)
<!--示例:显示用户名为test积分明细分页列表--> <!--取得一个DataTable,page为当前页码变量,totalcount为已声明的变量--> <%set DataTable dt=get_user_point_list(10, page, "user_name='test'", out totalcount)%> <!--取得分页页码列表,action为变量,相关说明请查阅get_page_link分页标签--> <%set string pagelist=get_page_link(10, page, totalcount, "userpoint", action, "__id__")%> <!--使用循环输出--> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%> 记录总数:{totalcount} 页码:{pagelist}
2.6.7 余额明细分页列表标签
根据SQL查询条件返回对应的余额明细分页列表,用循环输出。
参数说明:
page_size: 每页显示条数,int类型
page_index: 当前页码,int类型
strwhere: SQL查询语句
totalcount: 记录总数,out参数,int类型
get_user_amount_list(page_size, page_index, strwhere, out totalcount)
<!--示例:显示用户名为test余额明细分页列表--> <!--取得一个DataTable,page为当前页码变量,totalcount为已声明的变量--> <%set DataTable dt=get_user_amount_list(10, page, "user_name='test'", out totalcount)%> <!--取得分页页码列表,action为变量,相关说明请查阅get_page_link分页标签--> <%set string pagelist=get_page_link(10, page, totalcount, "useramount", action, "__id__")%> <!--使用循环输出--> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%> 记录总数:{totalcount} 页码:{pagelist}
2.6.8 邀请码列表标签
根据SQL查询条件返回对应的邀请码列表,用循环输出。
参数说明:
top: 显示条数,0为显示所有,int类型
strwhere: SQL查询语句
get_user_invite_list(top, strwhere)
<!--示例:显示用户名为test的所有邀请码列表--> <%set DataTable dt=get_user_invite_list(0, "user_name='test'")%> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%>
2.6.9 邀请码的状态标签
根据邀请码字符串返回一个布尔值,True为可用,False为不可用。
参数说明:
str_code: 需要验证的邀请码字符串,string类型
get_invite_status(str_code)
<!--示例:验证邀请码字符串“ER98FE888”是否有效--> <%set bool status=get_invite_status("ER98FE888")%> <%if(status==true)%> 该邀请码有效 <%else%> 该邀请码已使用过或已过期 <%/if%>
2.7 订单调用标签(方法)
位于DTcms.Web.UI/Label/orders.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法。
2.7.1 统计订单数量标签
根据查询条件统计订单总记录数。
参数说明:
strwhere: SQL查询语句
get_user_order_count(strwhere)
<!--示例:查询用户名为test未完成的订单总数--> 未完成订单:<%=get_user_order_count("status<3 and user_name='test'")%>
2.7.2 订单列表标签
根据查询条件显示前几行订单列表,用循环输出。
参数说明:
top: 显示条数,0为显示所有,int类型
strwhere: SQL查询语句
get_order_list(top, strwhere)
<!--示例:查询用户名为test所有未完成的订单列表--> <%set DataTable dt=get_order_list(0, "status<3 and user_name='test'")%> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%>
2.7.3 订单分页列表标签
根据SQL查询条件返回对应的订单分页列表,用循环输出。
参数说明:
page_size: 每页显示条数,int类型
page_index: 当前页码,int类型
strwhere: SQL查询语句
totalcount: 记录总数,out参数,int类型
get_order_list(page_size, page_index, strwhere, out totalcount)
<!--示例:显示用户名为test订单分页列表--> <!--取得一个DataTable,page为当前页码变量,totalcount为已声明的变量--> <%set DataTable dt=get_order_list(10, page, "user_name='test'", out totalcount)%> <!--取得分页页码列表,action为变量,相关说明请查阅get_page_link分页标签--> <%set string pagelist=get_page_link(10, page, totalcount, "userorder", action, "__id__")%> <!--使用循环输出--> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%> 记录总数:{totalcount} 页码:{pagelist}
2.7.4 订单商品列表标签
根据订单的ID查找对应的商品列表,返回的是List<DTcms.Model.article>实体对象
参数说明:
order_id: 订单ID,int类型
get_order_goods_list(order_id)
<!--查询订单ID为5的商品信息--> <%set List<DTcms.Model.article> ls=get_order_goods_list(5)%> <%foreach(DTcms.Model.article modelt in ls)%> ... <%/foreach%>
2.7.5 返回订单状态标签
根据订单ID查询当前订单处理状态描述,例如:待付款。
参数说明:
order_id: 订单ID,int类型
get_order_status(order_id)
<!--示例:查询订单ID为5的状态描述--> 订单状态:<%=get_order_status(5)%>
2.7.6 返回订单是否需要在线支付标签
根据订单ID查询当前订单是否需要在线支付,返回布尔值,True代表需要在线支付,False代表不需要在线支付。
参数说明:
order_id: 订单ID,int类型
get_order_payment_status(order_id)
<!--示例:查询订单ID为5是否需要在线支付--> <%set bool status=get_order_payment_status(5)%> <%if(status==true)%> //显示在线支付按钮 <%/if%>
2.8 购物车调用标签(方法)
位于DTcms.Web.UI/Label/shoppingcart.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法。
2.8.1 返回购物车商品总数标签
返回购物车商品总数。
get_cart_quantity()
<!--示例:输出当前购物车的商品总数--> 购物车商品 <%=get_cart_quantity()%> 件
2.8.2 购物车商品列表标签
购物车的所有商品列表,返回的是一个实体IList<DTcms.Model.cart_items>。
get_cart_list()
<!--示例:当前购物车的商品列表--> <%set List<DTcms.Model.cart_items> iList=get_cart_list()%> <%foreach(DTcms.Model.cart_items modelt in iList)%> ... <%/foreach%>
2.9 配送方式调用标签(方法)
位于DTcms.Web.UI/Label/express.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法。
2.9.1 配送方式列表标签
根据查询条件显示前几行配送方式列表,用循环输出。
参数说明:
top: 显示条数,0为显示所有,int类型
strwhere: SQL查询语句
get_express_list(top, strwhere)
<!--示例:查询所有配送方式列表--> <%set DataTable dt=get_express_list(0, "")%> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%>
2.9.2 返回配送方式标题标签
根据配送方式的ID查询该配送方式的标题名称。
参数说明:
express_id: 配送方式的ID,int类型
get_express_title(express_id)
<!--示例:查询配送方式ID为5的标题名称--> 配送方式:<%=get_express_title(5)%>
2.10 支付方式调用标签(方法)
位于DTcms.Web.UI/Label/payment.cs类里面的方法,如果你是一个程序员,随时可以根据自己的要求添加你自己的方法。
2.10.1 支付方式列表标签
根据查询条件显示前几行支付方式列表,用循环输出。
参数说明:
top: 显示条数,0为显示所有,int类型
strwhere: SQL查询语句
get_payment_list(top, strwhere)
<!--示例:查询所有配送方式列表--> <%set DataTable dt=get_payment_list(0, "")%> <%foreach(DataRow dr in dt.Rows)%> ... <%/foreach%>
2.10.2 返回支付方式标题标签
根据支付方式的ID查询该支付方式的标题名称。
参数说明:
payment_id: 支付方式的ID,int类型
get_payment_title(payment_id)
<!--示例:查询支付方式ID为5的标题名称--> 支付方式:<%=get_payment_title(5)%>
2.10.3 返回支付费用金额标签
根据支付方式的ID查询该支付方式的手续费用,返回一个decimal类型的货币格式。
参数说明:
payment_id: 支付方式的ID,int类型
get_payment_poundage_amount(payment_id)
<!--示例:查询支付方式ID为5的支付手续费用--> 支付手续费:<%=get_payment_poundage_amount(5)%>
三、页面标签
内置的页面标签,实际上是动态生成的aspx文件要继承的类,这些变量与方法只允许对应的模板页面使用。位于DTcms.Web.UI项目的Page目录下,如果开发者需要增加一个页面可以在此目录中增加对应的继承类文件。
3.1 频道页面变量与方法
频道页面的内置变量与方法,只允许当前对应的频道模板页使用,其它模板页面无法使用。
3.1.1 频道列表页内置变量
所有频道列表页都继承此类,位于DTcms.Web.UI/Page/article_list.cs文件类。
- page
- 当前页码,int类型
- category_id
- 类别ID,int类型
- totalcount
- 数据总数,int类型
- pagelist
- 分页页码字符串,string类型
3.1.2 频道详细页变量与方法
所有频道详细页都继承此类,位于DTcms.Web.UI/Page/article_show.cs文件类。
3.1.2.1 页面内置变量
- id
- 当前文章ID,int类型
- page
- 当前文章的调用别名,string类型
- model
- 文章实体类,DTcms.Model.article类型
3.1.2.2 获取上一条下一条的A链接方法
参数说明:
urlkey: URL配置名称,string类型
type: -1代表上一条,1代表下一条
defaultvalue: 默认文本
callIndex: 是否使用别名做为链接,0使用ID,1使用别名
get_prevandnext_article(urlkey, type, defaultvalue, callIndex)
<!--示例一:当前URL配置名称为news_show,显示上一条文章链接--> 上一条:<%=get_prevandnext_article("news_show", -1, "没有啦!", 0)%> <!--示例二:当前URL配置名称为news_show,显示下一条文章链接--> 下一条:<%=get_prevandnext_article("news_show", 1, "没有啦!", 0)%>
3.2 类别页面变量与方法
所有频道类别列表页都继承此类,位于DTcms.Web.UI/Page/category.cs文件类。
3.2.1 类别列表页内置变量
- category_id
- 父类别ID,0代表顶级分类,int类型
3.3 会员页面变量与方法
会员中心页面所继承的类,只允许对应的模板页访问。
3.3.1 会员中心页面内置变量
位于DTcms.Web.UI/Page/usercenter.cs文件类。
- action
- 操作类型,string类型
- curr_login_ip
- 本次登录IP,string类型
- pre_login_ip
- 上一次登录IP,string类型
- pre_login_time
- 上一次登录时间,string类型
- total_order
- 未完成订单数量,int类型
- total_msg
- 未读短消息,int类型
3.3.2 会员金额记录页面内置变量
位于DTcms.Web.UI/Page/useramount.cs文件类。
- action
- 操作类型,string类型
- page
- 当前页码,int类型
- totalcount
- 总记录数,int类型
3.3.3 会员积分记录页面内置变量
位于DTcms.Web.UI/Page/userpoint.cs文件类。
- action
- 操作类型,string类型
- page
- 当前页码,int类型
- totalcount
- 总记录数,int类型
3.3.4 会员短消息列表页内置变量
位于DTcms.Web.UI/Page/usermessage.cs文件类。
- action
- 操作类型,string类型
- page
- 当前页码,int类型
- totalcount
- 总记录数,int类型
3.3.5 会员短消息详细页内置变量
位于DTcms.Web.UI/Page/usermessage_show.cs文件类。
- id
- 当前短消息的ID,int类型
- model
- 当前短消息实体,DTcms.Model.user_message类型
3.3.6 会员订单列表页内置变量
位于DTcms.Web.UI/Page/userorder.cs文件类。
- action
- 操作类型,string类型
- page
- 当前页码,int类型
- totalcount
- 总记录数,int类型
3.3.7 会员订单详细页内置变量
位于DTcms.Web.UI/Page/userorder_show.cs文件类。
- id
- 当前订单的ID,int类型
- model
- 当前订单实体,DTcms.Model.orders类型
- payModel
- 支付方式实体,DTcms.Model.payment类型
四、常见问题
Q:制作模板时应该注意些什么?
A:首先需要注意该模板的保存文本格式为UTF-8;第二在模板页写Javascript代码时<SCRIPT>要改为小写<script>,遇到大括号{}时不要写成一行,一定要换行,否则模板引擎当成变量处理。
Q:模板生成后,测览页面时提示错误,错误信息:非法字符?
A:此类问题大部分是由于模板页面文件的保存格式为GBK或其它编码造成的,解决方法是找到该模板页,右键选择记事本打开,重新保存一下格式为UTF-8编码即可。
Q:模板生成后,测览页面时提示错误,错误信息:缺少}结束符?
A:一般在模板页使用循环或判断标签时,如果忘了加上结束标签则会出现以上错误,解决方法是找到模板页中有循环或判断的地方未加结束标签的加上对应的结束标签。
Q:模板制作好后,放到模板对应的文件夹,生成模板却找不到生成的aspx页面?
A:出现此类问题应先检查URL配置,查找有无URL配置指向这个模板名称,如果没有则需要添加一条URL配置信息。
五、中国翼通高级技巧
Q:模板的路径怎么写?
A:套模板常用变量
<%templateskin%> 模板方案路径
说明:我公司做出来的美工方案一般在一个目录,那么我们只需要把整个美工方案拷贝到模板目录下。加入路径即可。
Q:模板里能否套用其他模板文件?
A:可以的,不过要以_开始。下面有例子。所有的共用部分都是以_开始的。模板里嵌套其他页面(常见的共用部分我们就不用费时费力的重复做了。)
Q:dtcms2.0 与3.0调用文章列表有什么区别?
A:get_news_list 修改为 get_article_list看见了把2.0的模板在3.0下有报错。不过大多数标签都是通用的。
Q:重要:页面调用扩展字段里的值。(如下图)
A:
第一步:先在后台里按照要求添加扩展字段值。
第二步:插入以下代码
说明:
<%csharp%> dtcms里可以插入c#代码<%/csharp%>
netwing ncity=new netwing(); //这个是初始化我们的方法。
string city=ncity.get_field("city"); 取得字段值,并赋值给变量city.
最后吧{city}标签插入想要展示的地方。
展现的形式是:
不限 首尔 釜山 济州岛
最后的说明:这个是后台数据库是联动的,要增加删除项目。只要到后台里去修改就可以了。
还有这一样代码 city=city.Replace(">"+Session["city"].ToString(),">"+Session["city"].ToString()+""); 这个是点了变色。要配合其他一起用。一般网页上可以不放这个。我们会在以后再讲。
Q:请问一下,我新建一个比如酒店频道 hotel 能否加入购物车购买。?还是必须是goods 商品才能加入购物车购买?
A:可以的,只要你的频道有出售价格并且模板加入购物车按钮就行了!也就是说所有频道都可以实现购买。或者下订单!