模板制作教程:标签调用
模块内容列表循环-module标签
一、作用
用于循环查询模块内容数据(支持分页查询)
二、语法
{module module=模块名称 ....}{/module}
三、参数介绍
参数 | 介绍 |
---|---|
module | 模块名称,默认为当期模块(仅在模块模板中有效),例如新闻模块,填写news,只能填写一个模块目录 |
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的模块数据 |
catid | 栏目id,支持多个栏目以小写逗号分开,例如1,2,3,4 |
field | 可用字段,多个字段以小写逗号分开,默认全部字段 |
order | 排序方式,多个排序以小写逗号分开,默认降序排列,例如updatetime_asc表示按更新时间升序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
more | 当等于more=1时表示查询栏目模型字段,附表字段不支持查询 |
flag | 推荐位id,多个推荐位用,分隔 |
not_flag | 排除推荐位id,排除多个推荐位用,分隔 |
join | 关联表查询 |
on | 关联条件,格式为on=关联字段,被关联字段 |
maxlimit | 当分页时,限制最多查询多少条数据量 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量(当存在catid时会自动取该栏目设置的数量,修改栏目-模块设置-设置数量即可) |
urlrule | 分页地址规则:[page]表示分页标识符(当存在catid时会自动取该栏目设置的URL分页规则) |
sbpage | 当存在catid参数时又想按照自定义方式来分页需要设置参数sbpage=1,表示强制按自定义分页 |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时,建议数据查询的标签都加上缓存参数 |
return | 默认返回变量为t,调用方式就是{$t.字段值} |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在标签以外) |
{$total} | 用于分页时查询的总记录数量(写在标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在标签以外) |
{$nums} | 用于分页时返回总的页数(写在标签以外) |
{$pagesize} | 用于分页时返回当前每页查询数量(写在标签以外) |
{$pages} | 显示分页代码(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
每个字段类型的输出方式不一样
六、字段查询方法
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%表示like title '%标题%' |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4表示id in (1,2,3,4) |
NOTIN_字段 | NOTE IN子句查询,例如NOTIN_id=1,2,3,4表示id not in (1,2,3,4) |
BEWTEEN_字段 | 两者之间查询,例如BEWTEEN_id=1,100表示id在1到100的数据 |
BW_字段 | 同上,简写 |
NOT_字段 | 逻辑非查询,例如NOT_name=1,表示name不能等1的数据 |
字段=值 | 字段条件查询,例如uid=1表示会员id=1的数据 |
七、部分实例
1、显示文章指定栏目1的数据,num表示显示10条,order表示按更新时间排序,默认cache缓存时间10小时
{module module=news catid=1 order=updatetime num=10} 标题:{$t.title} 地址:{$t.url} 描述:{$t.description} 更新时间:{$t.updatetime} 自定义更新时间:{dr_date($t._updatetime, 'Y-m-d')} 栏目名称:{dr_cat_value('news', $t.catid, 'name')} 栏目URL:{dr_cat_value('news', $t.catid, 'url')} {/module} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name} {$debug} 表示调试信息是否出错
2、显示文章指定栏目1,2,3,4,5数据,num表示显示10条,order表示按人气排序
{module module=news catid=1,2,3,4 num=10 order=hits} ...... {/module} {$debug} 表示调试信息是否出错
3、显示文章在站点2的数据
{module module=news site=2} .... {/module} {$debug} 表示调试信息是否出错
4、显示其他模块photo的数据
{module module=photo} .... {/module} {$debug} 表示调试信息是否出错
5、分页显示文章模块的栏目为10的数据(当存在catid参数时只需加page参数就能分页输出)
{module module=news catid=10 page=1} ..... {/module} {$debug} 表示调试信息是否出错 {$pages}表示分页输出代码
6、自定义分页显示文章模块的数据(本例子用于网站首页)
{module module=news page=1 pagesize=10 urlrule=index.php?page=[page]} ..... {/module} {$debug} 表示调试信息是否出错 {$pages}表示分页输出代码 pagesize表示指定分页显示数据量 urlrule【本参数至关重要】表示分页地址规则,[page]参数必须,否则分页链接不正常;例子中的index.php?page=[page]表示在首页进行分页,下页的链接是 inex.php?page=2,以此类推!
7、推荐位查询,flag表示推荐位的id号,后台可以看到,你懂得
{module module=news flag=1 num=10} ..... {/module} {$debug} 表示调试信息是否出错
8、错误排查方式,必须掌握,很实用
{module catid=1 num=10} ..... {/module} {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息
9、显示news模块的带缩略图的10条文章并按时间先后顺序排列
{module module=news thumb=1 num=10 order=updatetime} 图片:{dr_thumb($t.thumb, 宽, 高, 是否水印)}或者 原图 {dr_get_file($t.thumb)} ..... {/module} {$debug} 表示调试信息是否出错
10、随机调用news模块的10条内容
{module module=news order=RAND cache=0 num=10} ..... {/module} {$debug} 表示调试信息是否出错
11、调用栏目1的内容和模型字段的内容
{module module=news catid=1 more=1} ..... {/module} {$debug} 表示调试信息是否出错 参数more=1表示调用模型字段,否则是不会显示模型字段的
12、栏目模型字段调用
{module module=news more=1} ..... {/module} {$debug} 表示调试信息是否出错 方法和内容字段一样 参数more=1表示调用模型字段,否则是不会显示模型字段的
13、查询某个会员发布的news内容
{module module=news uid=会员id号} .... {/module} {$debug} 表示调试信息是否出错
14、查询当前内容的作者的全部发布news内容
{module module=news uid=$uid} .... {/module} {$debug} 表示调试信息是否出错
15、前端列表排序方式按照后台设定的排序值来显示方法
order=displayorder,updatetime
打赏支付调用
在打赏页面或者内容页面调用方法:
{dr_donation($id, "打赏文章作者")}
页面显示内容为:
网站表单/全局表单列表调用 form标签
一、作用
用于表单的列表循环查询
二、语法
{form form=表单的英文名称 ....} {/form}
三、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
form | 要查询表单的别名,必须填写 |
site | 站点id,默认为当前站点 |
field | 可用字段,多个字段以小写分号分开,默认全部字段 |
order | 排序方式,多个排序以小写分号分开,默认降序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量,默认值为10条 |
urlrule | 分页地址规则:[page]表示分页标识符(此参数不存在时分页无效) |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 显示当前查询的sql语句,调试模板时候很有用哦(写在标签以外) |
{$total} | 用于分页时查询的总记录数量(写在标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在标签以外) |
{$pages} | 显示分页代码(写在标签以外) |
{$return} | 当前查询的结果集数组 |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
{$t.字段名称}或者{$t['字段名称']}
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、字段查询方法
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%,表示like title '%名称%' |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4 ,表示id in (1,2,3,4) |
BETWEEN_字段 | 两者之间查询,例如BETWEEN_id=1,100,表示id在1到100的数据 |
字段=值 | 字段条件查询,例如title=123,表示主题title=123的数据 |
七、相关例子
1、调用默认站点的留言表单(名称为liuyan)的最新10条数据
{form form=liuyan order=inputtime num=10} 主题:{$t.title}.... 时间:{$t.inputtime} 内容地址:{dr_form_show_url('liuyan', $t.id)} 自定义更新时间:{dr_date($t._inputtime, 'Y-m-d')} {/form} {$debug}
2、调用默认站点的留言表单(名称为liuyan)的所有数据并分页,每页5条
{form form=liuyan order=inputtime page=1 pagesize=5 urlrule=index.php?page=[page]} 主题:{$t.title} 内容地址:{dr_form_show_url('liuyan', $t.id)} .... {/form} {$pages}// 分页输出字符串 {$debug} urlrule是分页规则,根据你的实际页面来写,例子中是首页分页
URL地址调用
网站首页地址
电脑端:{SITE_URL} 移动端:{SITE_MURL}
模块首页地址(独立模块才有)
当前模块首页(电脑):{MODULE_URL} 指定模块首页(电脑):{dr_module_url('模块目录')} 当前模块首页(手机):{dr_mobile_url(MODULE_URL)} 指定模块首页(手机):{dr_mobile_url(dr_module_url('模块目录'))}
电脑URL转换成移动端URL
{dr_mobile_url('电脑url地址')}
循环标签内容的模块内容URL
电脑地址:{$t.url} 手机地址:{dr_mobile_url($t.url)}
前端动态调用模板
用法一、静态页面下调用动态页面内容
例如在某个静态html页面中想调用动态内容时,可以将下面代码放到它页面里:
{dr_ajax_template("ajax_test_file", "test.html")}意思是调用test.html的内容,作为动态调用模式,那么你需要在test.html写你的代码。
例如
Ajax动态调用模板通常用于调用会员登录信息,比如在静态页面或者首页中调用会员登录状态信息等。
第一步、在首页或静态页面加上下面代码:
{dr_ajax_template('dr_member_info', 'member.html')}
id值一定要和后面的函数第一个参数保持一致,第二个参数表示调用哪个模板,例子是member.html
第二步、创建api/member.html模板
{if $member}用户中心 退出平台 {else}登录 注册 {/if}
特别说明:使用本函数时必须在它的前面加载jquery
----传递参数的写法---
方法1:将固定参数传入到动态模板
{dr_ajax_template('dr_member_info', 'member.html', 'cc=123&bb=321')}api/member.html模板接收参数写法是:
{$cc} {$bb}方法2:将变量参数传入到动态模板,例如show.html内容页将内容id传入进去
{dr_ajax_template('dr_member_info', 'member.html', 'id='.$id)}{dr_ajax_template('dr_member_info', 'member.html', 'title='.$title.'&id='.$id)} 将内容标题和id一起传入api/member.html模板接收参数写法是:
{$id} {$title} 接收第二个参数
用法二、ajax动态加载模式,例如搜索页面无刷新滚动加载下一页
然后在api/items.html写上第二页的查询代码
{search module=$get.module id=$get.searchid total=$get.sototal order=$get.order catid=$get.catid page=1 pagesize=20 urlrule=$urlrule}{/search} {$t.title}¥ {number_format($t.price, 2)}{$t.comments}条评价 {$t.volume}销量
用法二的扩展:通过API请求,可返回指定变量
需要在api/items.html模板中定义返回变量:
在api/items.html任意位置写上: {php $this->call_value['变量1'] = "变量11的值";}
那么通过api请求会返回:
{ "code":1, "msg":"xxx", "data": {"file":"xxx.html","module":"", "call_value":{"变量1":"变量11的值" } } }
循环模块名称
循环输出全部已安装的模块
{cache name=module-content module=all} 名称:{$t.name} 地址:{$t.url} 图标:{$t.icon} 目录:{$t.dirname} {if MOD_DIR == $t.dirname} 表示是当前模块 {/if} {/cache}
循环输出指定的已安装的模块
{cache name=module-content module=模块目录1,模块目录2, 模块目录3}
--------------------------------------------
显示顺序受后台排序值而定
指定输出某个模块的URL(限于独立模块):
{dr_module_url("demo")}
判断是否首页
判断当前模板是否是首页,通常在导航条中运用
{if $indexc} 这是首页 {/if}
判断是否登录/用户登录状态
用于判断用户是否登录
=================模板中判断登录===========================
方法一:动态或者伪静态调用数据
这个不建议直接放在作为静态生成的模板中,以免换成后状态变不过来。
{if $member} 登录用户名:{$member.username} {else} 没有登录 用户注册 用户登录 {/if}
方法二:真静态调用数据
1、新建模板文件:template/pc/default[不固定名称]/home/api/member.html
{if $member} 登录了:{$member.username} 这个js函数需要引用cms的js库 我要退出 {else} 用户注册 用户登录 {/if}
2、以下代码放在其他模板上即可,需要提前加载jquery
{dr_ajax_template('dr_member_info', 'member.html')}
======================PHP中判断登录===========================
if (!\Phpcmf\Service::C()->member) { 没有登录 }
模块独立栏目列表循环 category标签
一、作用
用于独立模块的栏目列表循环查询
二、语法
{category module=模块目录名称 ....} {/category}
三、参数介绍
参数 | 介绍 |
---|---|
module | 模块目录 |
site | 站点id,默认为当前站点 |
id | 指定栏目id查询,多个id以,号分开 |
pid | 指定父级栏目id号 |
order | 排序方式 |
ismain | 开发中,1表示只显示主栏目 |
show | show=1表示显示全部栏目(包括隐藏的栏目),show=0或者不填时就不显示被隐藏的栏目 |
more | more=1表示加载栏目的全部字段,默认显示基础字段 |
num | 表示显示数量,不支持定点查询,只能填写整数 |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
由于此标签采用缓存模式,不支持自定义字段作为查询条件
四、返回变量
变量 | 参数 |
---|---|
{$return} | 当前查询的结果集数组 |
{$debug} | 显示当前查询的sql语句,调试模板时候很有用哦(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
{$t.字段名称}或者{$t['字段名称']}
六、相关例子
查询新闻news模块的所有顶级栏目
{category module=news pid=0} 栏目名称{$t.name} 栏目地址{$t.url} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
查询新闻news模块的指定id为1,2,3,4的栏目
{category module=news id=1,2,3,4} 栏目名称{$t.name} 栏目地址{$t.url} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
两级循环显示栏目(先循环父栏目,再循环其子栏目)如果有三级栏目,以此类推
{category module=news pid=0 return=c1} 我是父栏目:{$c1.name}
{category module=news pid=$c1.id return=c2} 我是{$c1.name}的子栏目:{$c2.name}
{/category} {/category}
查询news模块中的属性配置
{category module=news more=1} 栏目名称{$t.name} 栏目属性seo标题{$t['setting']['seo']['list_title']} 栏目属性seo关键词{$t['setting']['seo']['list_keywords']} 栏目属性seo描述词{$t['setting']['seo']['list_description']} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
模块共享栏目列表循环 category标签
一、作用
用于共享模块的栏目列表循环查询
二、语法
{category module=share ....} {/category}
三、参数介绍
参数 | 介绍 |
---|---|
module | share 固定参数 |
site | 站点id,默认为当前站点 |
id | 指定栏目id查询,多个id以,号分开,例如:1,2,3,4,5 |
pid | 指定父级栏目id号 |
order | 排序参数 |
ismain | 开发中,1表示只显示主栏目 |
show | show=1表示显示全部栏目(包括隐藏的栏目),show=0或者不填时就不显示被隐藏的栏目 |
more | more=1栏目的全部字段,否则显示基础字段 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
由于此标签采用缓存数据,不支持自定义字段作为查询条件
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 显示当前查询的sql语句,调试模板时候很有用哦(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、相关例子
查询共享栏目的所有顶级栏目
{category module=share pid=0} 栏目名称{$t.name} 栏目地址{$t.url} 缩略图 {dr_thumb($t.thumb)} 栏目内容{$t.content} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
查询共享栏目的指定id为1,2,3,4的栏目
{category module=share id=1,2,3,4} 栏目名称{$t.name} 栏目地址{$t.url} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
两级循环显示栏目(先循环父栏目,再循环其子栏目)如果有三级栏目,以此类推
{category module=share pid=0 return=c1} 我是父栏目:{$c1.name} {if $c1.child} 存在子栏目 {category module=share pid=$c1.id return=c2} 我是{$c1.name}的子栏目:{$c2.name} {/category} {/if} {/category}
内容栏目封面模板category.html 调用指定栏目下的所有子栏目
{dr_catpos($catid, '', true, '[name] ')} 获取本栏目封面的名字和链接 pid=指定栏目的id {category module=share pid=3 return=c1} {$c1.name} {/category}
最终效果
查询共享栏目中的属性配置
{category module=share more=1} 栏目名称{$t.name} 栏目属性seo标题{$t['setting']['seo']['list_title']} 栏目属性seo关键词{$t['setting']['seo']['list_keywords']} 栏目属性seo描述词{$t['setting']['seo']['list_description']} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
判断此栏目是否是外链栏目
{category module=share} 栏目名称{$t.name} {if $t.tid==2} 外链栏目 {/if} {if $t.tid==1} 内容模块栏目 {/if} {if $t.tid==0} 单页栏目 {/if} {/category} 这里的【$t.**】t是由return参数值来决定的,比如有些是return=c,那么t就改成c,成为{$c.name}
视频教程:循环多级栏目
联动菜单数据列表 linkage标签
一、语法
{linkage code=标识代码 ....} {/linkage}
二、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
code | 联动菜单的标识代码,例如中国地区,填写address |
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的联动菜单数据 |
num | 显示数量,默认显示全部 |
pid | 上级菜单,pid=0表示顶级联动菜单,pid请使用别名调用 |
id | 指定显示菜单别名(不是数字号),多个id以小写分号分开,例如beijing,shanghai,chongqing |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用,否则你懂得) |
不支持自定义字段作为查询条件
三、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
四、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
五、相关例子
1、查询address中的所有顶级联动数据
{linkage code=address pid=0} 一级地区名称:{$t.name}
{/linkage}
2、查询address中的一级和二级菜单数据
{linkage code=address pid=0 return=c1} 我是父菜单:{$c1.name}
{if $c1.child} {linkage code=address pid=$c1.id return=c2} 我是{$c1.name}的子菜单:{$c2.name}
{/linkage}{$debug_c2}表示第二级出错时的信息 {/if} {/linkage} {$debug_c1}表示第一级出错时的信息
3、查询address中的子菜单数据
{linkage code=address pid=beijing} 我是beijing的子菜单:{$t.name} {/linkage}
自定义链接循环 navigator标签
一、语法
{navigator type=分类ID ....} {/navigator}
二、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
type | 后台自定义链接分类ID |
site | 站点id,默认当前站点 |
num | 显示数量,默认显示全部 |
pid | 上级,pid=0表示顶级数据,pid请使用别名调用 |
show | 有show参数表示显示隐藏栏目 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
不支持自定义字段作为查询条件
三、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
四、显示字段
{$t.字段名称}或者{$t['字段名称']}
五、相关例子
1、调用type=1的数据,num表示10条数据
{navigator type=1 num=10} 地址:{$t.url} 标题:{$t.title} 名称:{$t.name} 图片:{dr_thumb($t.thumb,宽,高)}或者{dr_get_file($t.thumb)} {/navigator}
其他字段请参看“数据字典”中的表结构
2、调用站点2的type=2的数据,num表示10条数据
{navigator type=2 site=2 num=10 return=r} 地址:{$r.url} 标题:{$r.title} 名称:{$r.name} 图片:{dr_thumb($r.thumb,宽,高)}或者{dr_get_file($r.thumb)} {/navigator}
当return=r时,表示返回变量是r,当然了循环内容也得是r,如上例所示
3、N级调用方式,假设调用type=1的主数据
{navigator type=1 pid=0 return=n1}
自定义页面循环 page标签
一、语法
{page ....}{/page}
二、参数介绍
参数 | 介绍 |
---|---|
site | 站点id,默认当前站点,填写其他站点id |
id | 指定显示,多个id以小写分号分开,例如1,2,3,4,5 |
show | 有show参数表示显示隐藏单页(无论show=几都有效) |
num | 显示数量,默认显示全部 |
pid | 上级单页,pid=0表示顶级单页数据 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
不支持自定义字段作为查询条件
三、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$return} | 当前查询的结果集数组 |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在循环标签以外) |
{$key} | 当前记录指针位置,从0开始(写在循环标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
四、显示字段
{$t.字段名称}或者{$t['字段名称']}
五、相关例子
1、调用首页的顶级自定义页面
{page pid=0} {if APP_DIR=="page" && $pageid==$t.id}表示当前单页高亮{/if} 自定义页面名称:{$t.name} 自定义页面内容:{$t.content} 自定义页面地址:{$t.url} 缩略图:{dr_thumb($t.thumb)} 自定义页面seo标题:{$t.setting.title} 自定义页面seo关键词:{$t.setting.keywords} 自定义页面sei描述:{$t.setting.description} 相关附件: {loop $t.attachment $i $c} 序号: {$i} 标题:{$c.title}
描述:{$c.description}
文件原始地址:{dr_get_file($c.file)} 文件的下载地址:{dr_down_file($c.file)} 图片缩略图:{dr_thumb($c.file, 200, 200)} 图片缩略图带水印:{dr_thumb($c.file, 200, 200, 1)} {/loop} {/page}
2、当存在子页面时,显示其子页面
{if $child} {page pid=$id} {if APP_DIR=="page" && $pageid==$t.id}表示当前单页高亮{/if} {$t.name} {/page} {else} {page pid=$pid} {if APP_DIR=="page" && $pageid==$t.id}表示当前单页高亮{/if} {$t.name} {/page} {/if}
以上代码仅在自定义页面模板中有效
关键词Tag循环 tag标签
一、语法
{tag ....}{/tag}
二、参数介绍
参数 | 介绍 |
---|---|
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的模块数据 |
tag | 关键词,多个以,分开,匹配相关关键词 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
cache | 缓存时间单位秒,默认关闭缓存 |
order | 排序字段;当值为rand,随机显示 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
支持自定义字段作为查询条件
三、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$return} | 当前查询的结果集数组 |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在循环标签以外) |
{$pages} | 显示分页代码(写在循环标签以外) |
{$key} | 当前记录指针位置,从0开始(写在循环标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} |
四、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
五、相关例子
1、显示40个标签
{tag num=40} {$t.name} {/tag}
2、显示文章show.html的相关20个标签
{php $taga=urlencode($tag);}{tag tag=$taga order=rand num=20} {$t.name} {/tag}
3、随机显示20个标签
{tag num=20 order=rand} {$t.name} {/tag}
4、显示点击率最高的20个标签
{tag num=20 order=hits} {$t.name} {/tag}
SQL语句循环 sql标签
一、作用
通过sql语句来循环查询数据(也可以单条查询),支持分页输出
二、语法
{sql sql='SQL语句变量'....}{/sql}
三、参数
参数 | 介绍 |
---|---|
sql | sql参数只支持变量传递,@#表示数据表前缀;格式如:sql='$sql',这里的$sql变量就是你的sql语句 |
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的SQL数据 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量 |
urlrule | 分页地址规则:[page]表示分页标识符 |
cache | 缓存时间单位秒,默认关闭缓存; |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$total} | 用于分页时查询的总记录数量(写在循环标签以外) |
{$return} | 当前查询的结果集数组 |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在循环标签以外) |
{$pages} | 显示分页代码(写在循环标签以外) |
{$key} | 当前记录指针位置,从0开始(写在循环标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
{$t.字段名称}或者{$t['字段名称']}
由于是SQL自定义查询,结果不会被格式化
六、相关例子(注意引号的用法,sql语句必须存在于单引号之间,不能出现多个引号和嵌套引号)
1、在member表中查询username=admin的会员信息
{sql sql='$query'} {$t.username} {/sql} {$debug}
2、分页查询文章news表的数据
{sql sql='select * from @#1_news' page=1 pagesize=10 urlrule=index.php?page=[page]} {$t.title}
{/sql} {$pages} {$debug}
或者
{sql sql='$query' page=1 pagesize=10 urlrule=index.php?page=[page]} {$t.title}
{/sql} {$pages} {$debug}
3、不能出现多个引号和嵌套引号,例如
sql='SELECT * FROM dr_1_share_category WHERE name LIKE '%关键词%' '
这种是不允许的,应该写成这样
{sql sql='$query' *********}
任意表循环 - table标签
一、作用
用于任意表查询内容数据(支持分页查询)
二、语法
{table table=表名....}{/table}
三、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
table | 不含前缀的表名称,例如会员表,填写member |
table_site | 不含前缀的表名称,自动填充当前站点前缀,例如当前站点的news表,填写news时,将自动填充【当前站点_news】 |
field | 可用字段,多个字段以小写分号分开,默认全部字段 |
order | 排序方式,多个排序以小写分号分开,默认降序排列,例如updatetime_asc表示按更新时间升序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量 |
urlrule | 分页地址规则:[page]表示分页标识符 |
join | 关联表查询 |
on | 关联条件,格式为on=关联字段,被关联字段 |
cache | 缓存时间单位秒,默认关闭缓存; |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$total} | 用于分页时查询的总记录数量(写在循环标签以外) |
{$return} | 当前查询的结果集数组 |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在循环标签以外) |
{$pages} | 显示分页代码(写在循环标签以外) |
{$key} | 当前记录指针位置,从0开始(写在循环标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
{$t.字段名称}或者{$t['字段名称']}
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、字段查询方法
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%表示like title '%标题%' |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4表示id in (1,2,3,4) |
BEWTEEN_字段 | 两者之间查询,例如BEWTEEN_id=1,100表示id在1到100的数据 |
字段=值 | 字段条件查询,例如uid=1表示会员id=1的数据 |
七、部分实例
1、显示会员表数据,num表示显示10条,order表示按注册时间排序,默认cache缓存时间10小时
{table table=member order=regtime num=10} 会员:{$t.username} 注册时间:{dr_date($t.regtime, 'Y-m-d')} {/table} {$debug}诊断信息
2、调用10条最新的新闻news
{table table=1_news order=inputtime num=10} {$t.title} {/table} {$debug}诊断信息
3、会员表关联空间表查询
{table table=member join=member_data on=id,id num=10} 会员:{$t.username} 自定义字段:{$t.自定义字段} {/table} {$debug}诊断信息
4、在首页查询member表,并分页,每页显示5条,下页地址格式是index.php?page=页数。
{table table=member page=1 pagesize=5 urlrule=index.php?page=[page]} 会员:{$t.username} {/table} {$debug}诊断信息
5、查询当前站点的news表数据写法,默认站点查询的是1_news表
{table table_site=news num=10} 主题:{$t.title} {/table} {$debug}诊断信息
模块表单循环 - mform标签
一、作用
用于模块表单的列表循环查询
二、语法
{mform form=表单的表名称 cid=内容id module=模块目录 site=站点id ....} {/mform}
三、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
form | 要查询表单的表别名称,必须填写 |
cid | 内容的id,不填表示全部 |
module | 模块目录,默认当前模块 |
site | 站点id,默认为当前站点 |
field | 可用字段,多个字段以小写分号分开,默认全部字段 |
order | 排序方式,多个排序以小写分号分开,默认降序排列,例如inputtime_asc表示按录入时间升序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量,默认值为10条 |
urlrule | 分页地址规则:[page]表示分页标识符(此参数不存在时分页无效) |
cache | 缓存时间单位秒,默认关闭缓存; |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$total} | 用于分页时查询的总记录数量(写在循环标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在循环标签以外) |
{$pages} | 显示分页代码(写在循环标签以外) |
{$key} | 当前记录指针位置,从0开始(写在循环标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、字段查询方法
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%,表示like title '%名称%' |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4 ,表示id in (1,2,3,4) |
BEWTEEN_字段 | 两者之间查询,例如BEWTEEN_id=1,100,表示id在1到100的数据 |
字段=值 | 字段条件查询,例如title=123,表示主题title=123的数据 |
七、相关例子
1、调用默认站点的默认模块的留言表单(假设表名是ly,模块是news)的最新10条数据
{mform form=ly module=news order=inputtime num=10} 主题:{$t.title}.... 时间:{$t.inputtime} 自定义更新时间:{dr_date($t._inputtime, 'Y-m-d')} {/mform}{$debug}
2、调用默认站点的留言表单(假设表名是ly,模块是news)的所有数据并分页,每页5条
{mform module=news form=ly order=inputtime page=1 pagesize=5 urlrule=index.php?page=[page]} 主题:{$t.title}.... 时间:{$t.inputtime} 自定义更新时间:{dr_date($t._inputtime, 'Y-m-d')} {/mform} {$pages}// 分页输出字符串 {$debug} urlrule是分页规则,根据你的实际页面来写,你懂得
3、调用文章id=99的留言表单(假设表名是ly,模块是news)
{mform module=news form=ly cid=99} 主题:{$t.title}.... 时间:{$t.inputtime} 自定义更新时间:{dr_date($t._inputtime, 'Y-m-d')} {/mform} {$error}
4、在show.html页面调用当前内容的模块表单列表数据(假设表名是ly,模块是news)
{mform module=news form=ly cid=$id} 主题:{$t.title}.... 时间:{$t.inputtime} 自定义更新时间:{dr_date($t._inputtime, 'Y-m-d')} {/mform} {$debug}
用户列表循环 member标签
一、作用
用于会员信息的列表循环查询,比如查询会员列表等等
二、语法
{member....}{/member}
三、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
field | 可用字段,多个字段以小写分号分开,默认全部字段 |
more | 当more=1时,能查询出会员的自定义字段数据 |
order | 排序方式,多个排序以小写分号分开,默认降序排列,例如regtime_asc表示按注册时间升序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
groupid | 指定用户组id号,多个id号,分隔 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量,默认值为10条 |
urlrule | 分页地址规则:[page]表示分页标识符(此参数不存在时分页无效) |
cache | 缓存时间单位秒,默认关闭缓存; |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$total} | 用于分页时查询的总记录数量(写在循环标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在循环标签以外) |
{$pages} | 显示分页代码(写在循环标签以外) |
{$key} | 当前记录指针位置,从0开始(写在循环标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
{$t.字段名称}或者{$t['字段名称']}
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、字段查询方法
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_name=%名称%,表示like name '%名称%' |
IN_字段 | IN子句查询,例如IN_uid=1,2,3,4 ,表示uid in (1,2,3,4) |
BEWTEEN_字段 | 两者之间查询,例如BEWTEEN_uid=1,100,表示uid在1到100之间 |
字段=值 | 字段条件查询,例如name=123,表示主题name=123的数据 |
七、相关例子
1、按最新注册的会员
{member order=regtime num=10} {$t.name} 名称 {$t.username} 账号 {dr_avatar($t.id)} 头像 ... {/member}
2、查询会员组3的会员及会员的自定义字段信息
{member groupid=3 num=10 more=1} {$t.name} 名称 {$t.username} 账号 {dr_avatar($t.id)} 头像 {/member}
3、查询会员组3和4的成员
{member groupid=3,4 num=10 more=1} {$t.name} 名称 {$t.username} 账号 {dr_avatar($t.id)} 头像 {/member}
模块详细内容调用-content标签
一、作用
调用文章的详细字段(含附表)单条数据
二、语法
{content id=文章id module=模块名称 ....}{/content}
三、参数介绍
参数 | 介绍 |
---|---|
id | 文档的id |
module | 模块名称,例如新闻模块,填写news |
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的模块数据 |
more | more=1表示调用栏目公共模型字段,默认不加载模型字段 |
cache | 缓存时间单位秒,默认关闭缓存; |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在循环标签以外) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} |
五、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、相关例子
查询news模块的文章id=100的详细内容字段
{content id=100 module=news} 标题:{$t.title} 内容:{$t.content} 自定义更新时间:{dr_date($t._updatetime, 'Y-m-d')} {/content}
related相关模块内容循环 related标签
一、语法
{related tag=标签名称 module=模块名称 ....}{/related}
二、参数介绍
参数 | 介绍 |
---|---|
tfield | 指定模糊匹配字段,默认为keywords,可以指定成为其他字段 |
三、返回变量
四、显示字段
五、相关例子
1、在当前模块中查询关键字为:中国、美国、日本,的文章
{related tag=中国,美国,日本} {$t.title} {/related}
2、查询自定模块news的相关”中国、上海“的文章,只显示5条
{related module=news tag=中国,上海 num=5} {$t.title} {/related}
3、show.html调用相同关键词的相关文章
{related module=MOD_DIR tag=$tag} {$t.title} {/related}
用户组调用
1、循环显示全部用户组
{cache name=member_group}用户组ID:{$t.id} 用户组名称:{$t.name} 费用:{$t.price}
{/cache}
2、循环显示全部用户组和他的级别
{cache name=member_group}用户组ID:{$t.id} 用户组名称:{$t.name} 费用:{$t.price} {loop $t.level $m}
3、显示当前已经登录的会员用户组和他的级别
{loop $member.group $tt}用户组ID:{$tt.gid} 级别名称:{$tt.group_level} 级别图标:{$tt.group_icon} 用户组名称:{$tt.group_name} 有效期:{dr_date($tt.stime)} ~ {dr_date($tt.etime)}
{/loop}
4、显示已经登录用户组和他的级别信息
{cache name=member_group} {if $member && dr_in_array($t.gid, $member['groupid'])}用户组ID:{$t.id} 用户组名称:{$t.name} 费用:{$t.price}
5、判断当前已经登录的用户组是否是某个组
{if $member && dr_in_array(777, $member['groupid'])} 当前用户 是用户组ID为777的用户组成员 {/if}
6、判断当前已经等了的用户是不是在用户组4或5或6
{if $member && (dr_in_array(4, $member['groupid']) || dr_in_array(5, $member['groupid']) || dr_in_array(6, $member['groupid']) )} 当前用户是用户组ID为【4或5或6】用户组成员 {/if}
再加多个组的话,就在括号内多加几句话:
|| dr_in_array(这里填写新的用户组id号, $member['groupid'])
7、显示指定的会员用户组和他的级别
{php $user=dr_member_info(用户id号);} {loop $user.group $tt}用户组ID:{$tt.gid} 级别名称:{$tt.group_level} 级别图标:{$tt.group_icon} 用户组名称:{$tt.group_name} 有效期:{dr_date($tt.stime)} ~ {dr_date($tt.etime)}
{/loop}
当前页面URL地址
当浏览器输入的某个url时,获取这个url地址,例如
如何在模板中获取上图红框的地址呢??
一、在html模板中
调用当前页面的URL地址是:
{$my_web_url}
这个地址是唯一地址,不会有其他多余参数
获取url中的当前地址,会带多余的自定义参数(html静态化页面时不能用他)
{dr_now_url()}
二、在PHP程序里面
调用当前页面地址是:
dr_now_url()
瀑布流滚动加载
注意:如果开启了开发者模式,则加载完后无法显示“已经显示完了”,点击加载更多按钮也无效,关闭开发者模式即可。
滚动加载原理是当页面向下滚动时自动加载下一页数据并填充到当前页面,实现无刷新加载。
一、用于栏目列表
1、创建目标list_data.html专门用来写栏目分页循环标签的目标文件
{module catid=$catid order=updatetime page=1} {/module}
2、在list.html中标记显示容器div
{template "list_data.html"}
默认加载了第一页数据
3、在页面底部写加载的js
var Mpage=1; //滚动显示更多 var scroll_get = true; //做个标志,不要反反复复的加载 $(document).ready(function () { $(window).scroll(function () { if (scroll_get==true && (400 + $(window).scrollTop())>($(document).height() - $(window).height())) { scroll_get = false; layer.msg('内容加截中,请稍候',{time:1000}); dr_ajax_load_more(); } }); }); function dr_ajax_load_more(){ Mpage++; $.get('/index.php?s=api&c=api&m=template&name=list_data.html&module={MOD_DIR}&catid={$catid}&format=json&page='+Mpage+'&'+Math.random(),function(res){ $('.footer-cont').hide(); if(res.code==1){ if(res.msg==''){ //这里的判断条件需要结合list_data.html模板来写,否则会出现无限的加载了 layer.msg("已经显示完了",{time:500}); }else{ $('#content_list').append(res.msg); scroll_get = true; } }else{ layer.msg(res.msg,{time:2500}); } }, 'json'); }
#content_list就是(2)中的容器ID
二、用于搜索页面
1、创建目标search_data.html专门用来写搜索分页循环标签的目标文件
{search module=MOD_DIR id=$searchid total=$sototal order=$params.order catid=$catid page=1 pagesize=10 urlrule=$urlrule} {/search}
2、在search.html中标记显示容器div
{template "search_data.html"}
默认加载了第一页数据
加载按钮
3、在页面底部写加载的js
var Mpage=1; //滚动显示更多 var scroll_get = true; //做个标志,不要反反复复的加载 $(document).ready(function () { $(window).scroll(function () { if (scroll_get==true && (400 + $(window).scrollTop())>($(document).height() - $(window).height())) { scroll_get = false; layer.msg('内容加截中,请稍候',{time:1000}); dr_ajax_load_more(); } }); }); function dr_ajax_load_more(){ Mpage++; $.get('/index.php?s=api&c=api&m=template&name=search_data.html&module={MOD_DIR}&catid={$catid}&searchid={$searchid}&sototal={$sototal}&order={$params.order}&format=json&page='+Mpage+'&'+Math.random(),function(res){ $('.footer-cont').hide(); if(res.code==1){ if(res.msg==''){ //这里的判断条件需要结合list_data.html模板来写,否则会出现无限的加载了 $('#is_ajax_btn').hide(); layer.msg("已经显示完了",{time:500}); }else{ $('#content_list').append(res.msg); scroll_get = true; } }else{ layer.msg(res.msg,{time:2500}); } }, 'json'); }
#content_list就是(2)中的容器ID
三、用于主站首页
1、创建目标index_data.html专门用来写搜索分页循环标签的目标文件
{module module=news page=1 pagesize=10 urlrule=index.php} {/module}
主站时需要指定module=具体模块目录
2、在index.html中标记显示容器div
{template "index_data.html"}
默认加载了第一页数据
3、在页面底部写加载的js
var Mpage=1; //滚动显示更多 var scroll_get = true; //做个标志,不要反反复复的加载 $(document).ready(function () { $(window).scroll(function () { if (scroll_get==true && (400 + $(window).scrollTop())>($(document).height() - $(window).height())) { scroll_get = false; layer.msg('内容加截中,请稍候',{time:1000}); dr_ajax_load_more(); } }); }); function dr_ajax_load_more(){ Mpage++; $.get('/index.php?s=api&c=api&m=template&name=index_data.html&format=json&page='+Mpage+'&'+Math.random(),function(res){ $('.footer-cont').hide(); if(res.code==1){ if(res.msg==''){ //这里的判断条件需要结合list_data.html模板来写,否则会出现无限的加载了 layer.msg("已经显示完了",{time:500}); }else{ $('#content_list').append(res.msg); scroll_get = true; } }else{ layer.msg(res.msg,{time:2500}); } }, 'json'); }
#content_list就是(2)中的容器ID
四、用于模块首页
1、创建目标news/module_data.html专门用来写搜索分页循环标签的目标文件
{module module=MOD_DIR page=1 pagesize=10 urlrule=index.php} {/module}
2、在news/index.html中标记显示容器div
{template "module_data.html"}
默认加载了第一页数据
3、在页面底部写加载的js
var Mpage=1; //滚动显示更多 var scroll_get = true; //做个标志,不要反反复复的加载 $(document).ready(function () { $(window).scroll(function () { if (scroll_get==true && (400 + $(window).scrollTop())>($(document).height() - $(window).height())) { scroll_get = false; layer.msg('内容加截中,请稍候',{time:1000}); dr_ajax_load_more(); } }); }); function dr_ajax_load_more(){ Mpage++; $.get('/index.php?s=api&c=api&m=template&name=module_data.html&module={MOD_DIR}&format=json&page='+Mpage+'&'+Math.random(),function(res){ $('.footer-cont').hide(); if(res.code==1){ if(res.msg==''){ //这里的判断条件需要结合list_data.html模板来写,否则会出现无限的加载了 layer.msg("已经显示完了",{time:500}); }else{ $('#content_list').append(res.msg); scroll_get = true; } }else{ layer.msg(res.msg,{time:2500}); } }, 'json'); }
#content_list就是(2)中的容器ID
------------
题外判断,判断某个div是否滚到底部
$(document).ready(function () { var nScrollHight = 0; //滚动距离总长(注意不是滚动条的长度) var nScrollTop = 0; //滚动到的当前位置 var nDivHight = $(".Main").height(); $(".Main").scroll(function(){ nScrollHight = $(this)[0].scrollHeight; nScrollTop = $(this)[0].scrollTop; var paddingBottom = parseInt( $(this).css('padding-bottom') ),paddingTop = parseInt( $(this).css('padding-top') ); if(nScrollTop + paddingBottom + paddingTop + nDivHight >= nScrollHight) { //到达底部了 } }); });
自定义分页样式配置
一、全局配置文件
/config/page/pc/page.php 电脑端 前端分页样式 /config/page/pc/member.php 电脑端 用户中心分页样式 /config/page/mobile/page.php 移动端 前端分页样式 /config/page/mobile/member.php 移动端 用户中心分页样式
多站点分页配置文件:
多站目录下新建/config/page/pc/page.php 电脑端 前端分页样式 多站目录下新建/config/page/pc/member.php 电脑端 用户中心分页样式 多站目录下新建/config/page/mobile/page.php 移动端 前端分页样式 多站目录下新建/config/page/mobile/member.php 移动端 用户中心分页样式
分页配置文件完整参数解析:
'共%s条', // 你希望在分页中显示“统计”名字链接。如果你不希望显示,可以把它的值设为 FALSE 'total_tag_open' => '
- ',
// 区域标签
'full_tag_close' => '
二、临时配置文件
临时配置只针对本地查询的分页标签,写在本次查询之前,语法格式为:
set_page_config(array( /**这里是自定义分页样式配置文件*/ // 自定义“统计”链接 'total_link' => '共%s条', // 你希望在分页中显示“统计”链接的名字。如果你不希望显示,可以把它的值设为 FALSE 'total_tag_open' => '', // “统计”链接的打开标签 'total_tag_close' => '', // “统计”链接的关闭标签 // 自定义“下一页”链接 'next_link' => '下一页', // 你希望在分页中显示“下一页”链接的名字。如果你不希望显示,可以把它的值设为 FALSE 'next_tag_open' => '', // “下一页”链接的打开标签 'next_tag_close' => '', // “下一页”链接的关闭标签 // 自定义“上一页”链接 'prev_link' => '上一页', // 你希望在分页中显示“上一页”链接的名字。如果你不希望显示,可以把它的值设为 FALSE 'prev_tag_open' => '', // “上一页”链接的打开标签 'prev_tag_close' => '', // “上一页”链接的关闭标签 // 自定义“当前页”链接 'cur_tag_open' => '', // “当前页”链接的打开标签 'cur_tag_close' => '', // “当前页”链接的关闭标签 // 自定义“数字”链接 'num_tag_open' => '', // “数字”链接的打开标签 'num_tag_close' => '', // “数字”链接的关闭标签 // 自定义“最后一页”链接 'last_link' => false, // 自定义“第一页”链接 'first_link' => false, // 是否显示数字链接 'display_pages' => TRUE, // 显示的分页左右两边数字个数 'num_links' => 4, // 区域标签 'full_tag_open' => '', // 区域标签 'full_tag_close' => '', ));?> {module ....} {/module}
调用分页时就按本次配置为准:
{$pages}
三、给标签指定分页配置文件
pagefile=分页文件名
分页文件名位于:/config/page/pc或mobile/文件名.php
例如,module标签指定分页篇文章文件为test_page
{module ******* pagefile=test_page ***}
文件位置:/config/page/pc或mobile/test_page.php
四、其他例子
1、给分页加select选择页数,适用于列表页面和搜索页面
{$pages} ////////////开始////////////// {if $nums} {/if}
2、跳转页面设置
3、单独写上下页标签
需要写在循环标签之后 当前页码:{$page} 总页数:{$nums} 总条数:{$total} 当前url:{$my_web_url} 下一页:{str_replace('{page}', min($page+1, $nums), $pagerule)} 上一页:{str_replace('{page}', max($page-1, 1), $pagerule)} 首页:{str_replace('{page}', 1, $pagerule)} 末页:{str_replace('{page}', $nums, $pagerule)} ------如果循环标签规定了return=xxx,那么需要改成----- 当前页码:{$page_xxx} 总页数:{$nums_xxx} 总条数:{$total_xxx} 下一页:{str_replace('{page}', min($page_xxx+1, $nums_xxx), $pagerule_xxx)} 上一页:{str_replace('{page}', max($page_xxx-1, 1), $pagerule_xxx)}
外部页面调用网站表单/全局表单提交项目
默认情况下表单提交页面是单独的一个页面,而在实际项目中有时候需要把表单提交页面放到首页、放到指定的栏目页、放到会员中心,都有可能性。
本章节来介绍如何把网站表单提交内容部分放到其他页面的任意位置
1、我们以下图的留言表单为例
2、在指定的页面,例如index.html首页上加上,下面代码中的‘liuyan’需要改成你自己的表单别名
{php extract(dr_get_form_post_value('liuyan'))}调试信息:{$debug}调试信息:{$debug}
注意ajax提交需要加载官方js库:https://www.xunruicms.com/doc/627.html
3、然后预览首页就有了!
这个界面是按照系统字段自动生成的界面,如果你不喜欢这种布局,可以自己改html代码即可,
{$myfield} {$diyfield} {$sysfield}
这几个变量就是自动生成字段对应的html标签,你可以把它删掉,自己写html控件
自己写html控件的时候,一定记住自己的表单name参数是data[字段] 形式 不要忘了! 如:
这项操作需要格外注意的几个参数:
1、如果不是在form/xxx_post.html 页面提交的情况下,需要注意提交地址
2、注意表单开头
{php extract(dr_get_form_post_value('liuyan'))}
这里的liuyan,一定要换成你自己的表单字段名称
3、点击ajax提交按钮无反应,排查如下:
需要加入注意ajax提交需要加载官方js库:https://www.xunruicms.com/doc/627.html
外部页面调用模块表单提交项目
默认情况下模块表单提交页面是单独的一个页面,而在实际项目中有时候需要把模块表单提交页面放到内容详情页面,这样可以不用跳转到新页面提交表单,而是直接在内容中提交表单。
1、以文章反馈表单为例
2、在文章内容页面show.html,下面代码中的‘fankui’需要改成你自己的表单别名
{php extract(dr_get_mform_post_value(MOD_DIR, 'fankui',$id))}调试信息:{$debug}调试信息:{$debug}
注意ajax提交需要加载官方js库:https://www.xunruicms.com/doc/627.html
3、然后预览文章页就有了!
单独调用栏目数据 dr_cat_value/dr_share_cat_value
独立模块栏目函数:
dr_cat_value("模块目录", 栏目ID, "输出字段")
共享模块栏目函数:
dr_share_cat_value(栏目ID, "输出字段")
用法举例:
1、调用指定共享栏目ID999的信息
栏目名称:{dr_share_cat_value(999, "name")} 栏目地址:{dr_share_cat_value(999, "url")} 栏目单页内容:{dr_share_cat_value(999, "content")} 缩略图:{dr_get_file(dr_share_cat_value(999, "thumb"))} 栏目的数据量:{count action=module module=模块目录 catid=999}
栏目属性seo标题{dr_share_cat_value(999, "setting", "seo", "list_title")} 栏目属性seo关键词 {dr_share_cat_value(999, "setting", "seo", "list_keywords")} 栏目属性seo描述词 {dr_share_cat_value(999, "setting", "seo", "list_description")}
调用共享栏目ID999的单页介绍内容 前10个字符,并去掉HTML格式化代码,多余的用...显示 {dr_strcut(dr_clearhtml(dr_share_cat_value(999, "content")), 10, '...')}
2、调用指定news模块的栏目ID999的信息
栏目名称:{dr_cat_value("news", 999, "name")} 栏目地址:{dr_cat_value("news", 999, "url")} 缩略图:{dr_get_file(dr_cat_value("news", 999, "thumb"))} 栏目的数据量:{count action=module module=news catid=999}
条件循环修饰符、通配符
在条件查询循环时需要用到的修饰符
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%,表示like title '%名称%' |
NOTLIKE_字段 | 是LIKE的反条件 v4.62以上支持 |
JSON_字段 | 用于查询json数据格式 |
NOTJSON_字段 | 是JSON的反条件 v4.62以上支持 |
FIND_字段 | 用于查询Members,Related字段的数据格式,FIND_IN_SET语法 |
NOTFIND_字段 | 是FIND的反条件 v4.62以上支持 |
MAP_地图字段 | 查询指定坐标范围内容的数据,例如MAP_dtu=xxxx,xxxx|10,表示查询坐标范围内10km的数据 |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4 ,表示id in (1,2,3,4) |
NOTIN_字段 | IN子句查询,例如NOTIN_id=1,2,3,4 ,表示id not in (1,2,3,4) |
NOT_字段 | 不等于,例如NOT_title=999,表示title <> '999' |
BW_字段 | 两者之间查询,例如BETWEEN_id=1,100,表示id在1到100的数据 |
GT_字段 | 大于,需要字段值是数字类型,例如GT_id=222 ,表示id >222 |
EGT_字段 | 大于等于,需要字段值是数字类型,例如EGT_id=222 ,表示id >=222 |
LT_字段 | 小于,需要字段值是数字类型,例如LT_id=222 ,表示id <222 |
ELT_字段 | 小于等于,需要字段值是数字类型,例如ELT_id=222 ,表示id <=222 |
BETWEEN_字段 | 两者之间查询,例如BETWEEN_id=1,100,表示id在1到100的数据 |
DAY_字段 | 按N天内查询,用于Date类型的字段查询,例如DAY_inputime=0,表示当天的数据、DAY_inputime=1,表示昨天到今天的数据、DAY_inputime=7,表示7天内的数据、 |
WEEK_字段 | 按N周查询,用于Date类型的字段查询,例如WEEK_inputime=0,表示本周一到当天的数据、WEEK_inputime=1,表示上周一到今天的数据、只查询上周数据写法是WEEK_inputtime=E1 |
MONTH_字段 | 按N月内查询,用于Date类型的字段查询,例如MONTH_inputime=0,表示当月的数据、MONTH_inputime=1,表示上个月到现在的数据、只查询上个月数据写法是MONTH_inputime=E1、指定月份查询MONTH_inputtime=2020-1,2020-4 |
YEAR_字段 | 按N年内查询,用于Date类型的字段查询,例如YEAR_inputime=0,表示本年到现在的数据、YEAR_inputime=1,表示去年到现在的数据、只查询去年月数据写法是YEAR_inputime=E1、指定年份查询YEAR_inputtime=2020,2023 |
SEASON_字段 | 按1-4个季度查询,用于Date类型的字段查询,例如SEASON_inputime=0,表示本年的当前季度数据、SEASON_inputime=1,表示本年第1季度的数据、只查询2012年第一季度数据写法是SEASON_inputime=1-2012 |
NULL_字段=true | 查询字段是空值 v4.62以上支持 |
NOTNULL_字段=true | 查询字段是非空值 v4.62以上支持 |
字段=值 | 字段条件查询,例如title=123,表示主题title=123的数据 |
适用于 module、table、form、mfrom、member、related循环标签的条件查询
常见例子:
查询今天的新闻news模块内容
{module module=news DAY_updatetime=0} {$t.updatetime}
{/module} {$debug}
查询本月的新闻news模块内容
{module module=news MONTH_updatetime=0} {$t.updatetime}
{/module} {$debug}
查询上月的新闻news模块内容
{module module=news MONTH_updatetime=E0} {$t.updatetime}
{/module} {$debug}
查询上月的新闻news模块内容
{module module=news MONTH_updatetime=E1} {$t.updatetime}
{/module} {$debug}
查询上月到现在的新闻news模块内容
{module module=news MONTH_updatetime=1} {$t.updatetime}
{/module} {$debug}
查询去年到现在的新闻news模块内容
{module module=news YEAR_updatetime=0} {$t.updatetime}
{/module} {$debug}
查询当前季度的新闻news模块内容
{module module=news SEASON_updatetime=0} {$t.updatetime}
{/module} {$debug}
查询2012年第四季度的新闻news模块内容
{module module=news SEASON_updatetime=4-2012} {$t.updatetime}
{/module} {$debug}
查询本周的新闻news模块内容
{module module=news WEEK_updatetime=0} {$t.updatetime}
{/module} {$debug}
查询上周的新闻news模块内容
{module module=news WEEK_updatetime=E1} {$t.updatetime}
{/module} {$debug}
查询2019年整的新闻news模块内容
{module module=news YEAR_updatetime=2019} {$t.updatetime}
{/module} {$debug}
JSON通配符,匹配多条件查询
{module module=news JSON_fuxuankuang=2|3|4} {$t.title}
{/module} {$debug} 这个是查询fuxuankuang字段包含2,3,4的选项数据
如果在内容页中可以查询当前复选框值关联的其他内容,写法是:
{php $fkx = implode('|', $fuxuankuang);} {module module=news NOT_id=$id JSON_fuxuankuang=$fkx} {$t.title}
{/module} {$debug}
查询指定坐标范围内容的10KM内的数据(其中,ditu是后台创建的模块字段,类型为百度地图格式)
{module module=news MAP_ditu=104.081462,30.657414|10 order=ditu} {$t.title} 距离:{$t.ditu_map} 米
{/module} {$debug}
其中,ditu是自定义的百度地图字段
function标签-调用函数值
一、作用
在模板中调用自定义函数的返回结果,带缓存功能,效率高
一般用于数据库查询,这种标签自带缓存,可以避免重复查询数据
二、语法
{function name=自定义函数的名称 ....}{/function}
三、参数介绍
参数 | 介绍 |
---|---|
name | 自定义函数的名称,需要预先定义函数并且以my_为前缀 |
param | 向自定义函数中传递参数 |
param数字 | 向自定义函数中传递多个参数,例如param2=第二个参数值,param3=第三个参数值(V4.5.1以上版本有效) |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时,建议数据查询的标签都加上缓存参数 |
return | 默认返回变量为t,调用方式就是{$t.字段值} |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{...reutrn=a}时,变量格式{$key_a} |
五、显示字段
根据你的预订函数返回值来显示
六、无参数的实例
1、定义预定义函数:my_tianrui_test
新建或者编辑文件config/custom.php,增加下面的函数
function my_tianrui_test() { return "这是tianrui函数的返回值"; }
2、模板中的调用方法
{function name=my_tianrui_test cache=300}{$t}{/function} 这句话会输出 “这是tianrui函数的返回值” 错误诊断:{$debug}
七、带一个参数的实例
1、定义预定义函数:my_tianrui_test2
新建或者编辑文件config/custom.php,增加下面的函数
function my_tianrui_test2($p) { return "这是tianrui函数的返回值:".$p; }
p是函数的参数,通过标签传入的动态变量,只接受一个参数传入
2、模板中的调用方法
{function name=my_tianrui_test2 param=888 cache=300}{$t}{/function} 这句话会输出 “这是tianrui函数的返回值:888” 错误诊断:{$debug}
⑧、带多个参数的实例
1、定义预定义函数:my_tianrui_test3
新建或者编辑文件config/custom.php,增加下面的函数
function my_tianrui_test3($p, $pp) { return "这是tianrui函数的返回值:".$p."和".$pp; }
p和pp是函数的参数,通过标签传入的动态变量,只接受一个参数传入
2、模板中的调用方法
{function name=my_tianrui_test2 param=888 param2=999 cache=300}{$t}{/function} 这句话会输出 “这是tianrui函数的返回值:888和999” 错误诊断:{$debug}
综合示例:
1、统计指定内容模块的已通过的内容数量
新建或者编辑文件config/custom.php,增加下面的函数
function my_tongji_module_nums($dir) { if (!$dir) { return "没有param参数"; } // 这里是写查询 return \Phpcmf\Service::M()->table(SITE_ID.'_'.$dir.'_index')->where('status', 9)->counts(); }
模板中的调用方法
{function name=my_tongji_module_nums param=news cache=300}{$t}{/function} 输出 news模块的已通过数量,param是模块目录,缓存300秒 错误诊断:{$debug}
2、统计任意表的可用数据量
新建或者编辑文件config/custom.php,增加下面的函数
function my_tongji_table_nums($table) { if (!$table) { return "没有param参数"; } // 这里是写查询 return \Phpcmf\Service::M()->table($table)->counts(); }
模板中的调用方法
{function name=my_tongji_table_nums param=member cache=300}{$t}{/function} 输出 member表的数量,param是表名称,缓存300秒 错误诊断:{$debug}
模块内容评论循环 - comment标签
一、作用
用于循环查询模块评论数据(支持分页查询)
二、语法
{comment module=模块名称....}{/comment }
三、参数介绍(红色表示必填参数,蓝色表示系统默认参数)
参数 | 介绍 |
---|---|
module | 用来查询模块的评论,例如新闻模块,填写news |
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的模块数据 |
cid | 内容id |
field | 可用字段,多个字段以小写分号分开,默认全部字段(为了提高缓存效率,建议填写此选项) |
order | 排序方式,多个排序以小写分号分开,默认降序排列,例如inputtime_asc表示按更新时间升序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量(当存在catid时会自动取该栏目设置的数量,修改栏目-模块设置-设置数量即可) |
urlrule | 分页地址规则:[page]表示分页标识符(当存在catid时会自动取该栏目设置的URL分页规则) |
sbpage | 当存在catid参数时又想按照自定义方式来分页需要设置参数sbpage=1,表示强制按自定义分页 |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时 |
return | 默认返回变量为t,调用方式就是{$t.字段值}(多级查询必须设置return=其他字母,只能作为最后一个参数使用,否则你懂得) |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在list标签以外) |
{$total} | 用于分页时查询的总记录数量(写在list标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在list标签以外) |
{$nums} | 用于分页时返回总的页数(写在list标签以外) |
{$pagesize} | 用于分页时返回当前每页查询数量(写在list标签以外) |
{$pages} | 显示分页代码(写在list标签以外) |
{$key} | 当前记录指针位置,从0开始(写在list标签以内) |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{list ...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、字段修饰符
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%表示like title '%标题%' |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4表示id in (1,2,3,4) |
BEWTEEN_字段 | 两者之间查询,例如BEWTEEN_id=1,100表示id在1到100的数据 |
字段=值 | 字段条件查询,例如uid=1表示会员id=1的数据 |
七、部分实例
1、显示查询新闻模块的最新10条评论
{comment module=news order=inputtime num=10} 评论内容:{$t.content} 转换表情的内容:{dr_replace_emotion($t.content)} 转换HTML的内容:{htmlspecialchars_decode($t.content)} 评论时间:{dr_date($t.inputtime, 'Y-m-d')} {/comment}
2、显示查询新闻模块show.html文章本篇内容的最新10条评论
{comment module=news cid=$id order=inputtime num=10} 评论内容:{$t.content} 转换表情的内容:{dr_replace_emotion($t.content)} 转换HTML的内容:{htmlspecialchars_decode($t.content)} 评论时间:{dr_date($t._inputtime, 'Y-m-d')} {/comment}
3、排序显示,显示查询新闻模块的评分最高的10条评论
{comment module=news order=avgsort num=10} 评论内容:{$t.content} 转换表情的内容:{dr_replace_emotion($t.content)} 转换HTML的内容:{htmlspecialchars_decode($t.content)} 评论时间:{dr_date($t._inputtime, 'Y-m-d')} {/comment} order=support 支持数最高 order=oppose 反对数最高
4、show.html 调用内容评论,但不调用回复
{comment module=news cid=$id reply=0 order=inputtime num=10} 评论内容:{$t.content} 转换HTML的内容:{htmlspecialchars_decode($t.content)} 评论时间:{dr_date($t._inputtime, 'Y-m-d')} {/comment}
5、show.html 调用内容评论,判断的方式调用回复
{comment module=news cid=$id reply=0 order=inputtime num=10} 评论内容:{$t.content} 转换HTML的内容:{htmlspecialchars_decode($t.content)} 评论时间:{dr_date($t._inputtime, 'Y-m-d')} {if $t.in_reply} {comment module=news reply=$t.id order=inputtime return=t2} 评论内容:{$t2.content} 转换HTML的内容:{htmlspecialchars_decode($t2.content)} 评论时间:{dr_date($t2._inputtime, 'Y-m-d')} {/comment} {/if} {/comment}
相关栏目-下级或者同级栏目
调用栏目下级或者同级栏目,当栏目存在下级栏目时就调用下级栏目,如果不存在下级栏目就调用当前栏目的同级栏目
适用于 search.html list.html category.html show.html page.html模板
{loop $related $c}
判断当前栏目是否含有子栏目
{if $cat.child} 有 {else} 没有 {/if}
循环多站点
适用于多站点插件
用于显示全部站点信息
{cache name=site_info} 站点名称:{$t.SITE_NAME} 站点LOGO:{$t.SITE_LOGO} 站点PC地址:{$t.SITE_URL} 站点移动端地址:{$t.SITE_MURL} {if SITE_ID==$t.SITE_ID} 这是当前站点 {/if} {/cache} 站点数量:{$count}
循环标签的num优化
开发者在设计模板的时候需要避免查询标签过多的情况,特别是对num参数的优化,举例
查询10条数据 {module module=news num=0,10} {$t.title} {/module} 再从11条开始再查询10条 {module module=news num=11,10} {$t.title} {/module}
上面是用了两条查询语句,其实这种可以缩小成一个查询,分两次来输出即可
{module module=news num=0,20} {/module} 这里只查询一次,20条,下面分两次输出,一次输出10条 {php $r=array_slice($return, 0, 10);} // 这里是循环0-10条数据 {loop $r $t} {$t.title} {/loop} {php $r=array_slice($return, 11, 20);} // 这里是循环11-20条数据 {loop $r $t} {$t.title} {/loop}
过滤同步重复的内容
场景一:同步内容多条
模块内容同步发布到多栏目下,在循环以及搜索结果中都会重复出显示,,,如何过滤掉重复的信息?
方法1、ELT_link_id=0
{循环标签*** ELT_link_id=0 *******}
方法2、IN_link_id=0,-1
{循环标签*** IN_link_id=0,-1 *******}
场景二、内容中本身就有重复标题
这种写法必须加上field参数指定一下显示字段,并过滤重复标题:
{module field=DISTINCT_title,url,id *******}
模块内容热门/点击/阅读排行
一、作用
模块内容热门/点击/阅读排行(支持分页查询)
二、语法
{hits module=模块名称 ....}{/hits}
三、参数介绍
与module标签一致
四、返回变量
与module标签一致
五、显示字段
与module标签一致
六、部分实例
显示新闻news模块最热门的的10条数据
{hits module=news num=10} 标题:{$t.title} 地址:{$t.url} 总点击数:{$t.hits} 本日点击:{$t.day_hits} 本周点击:{$t.week_hits} 本月点击:{$t.month_hits} 年点击量: {$t.year_hits} 更新时间:{$t.updatetime} 自定义更新时间:{dr_date($t._updatetime, 'Y-m-d')} 栏目名称:{dr_cat_value('news', $t.catid, 'name')} 栏目URL:{dr_cat_value('news',$t.catid, 'url')} {/hits}
判断移动端
判断移动端的写法
1、是否移动端模板:
{if IS_MOBILE} 当前模板是调用的移动端模板,(有可能是在电脑上访问,但不可能使用的电脑模板) {/if}
2、是否来自移动端访客:
{if IS_MOBILE_USER} 当前访客是来自移动端,(一定是在手机上访问的人,但可能使用的电脑模板) {/if}
在循环标签中使用自定义SQL条件where
模板循环标签中的查询条件,可以使用通配符来组装各种形式的查询条件语句,
当通配符都不满足你的查询条件时,你可以使用where标签来自己写原生态SQL语句,语法格式为:
{php $where=urlencode("自定义sql条件");} {module module=news where=$where} {/module} {$debug}
例如查询 uid是 123或者是321 的用户发布的文章:
{php $where=urlencode("(uid=123 or uid=321)");} {module module=news where=$where} {/module} {$debug}
推荐位数据调用 flag
一、首先定义好推荐位
有些版本在自定义字段菜单下:
二、调用示例
http://help.xunruicms.com/15.html
1、前端页面调用模块【news】的【id是1的】推荐位中的文章内容
{module module=news flag=1} {$t.title} {$t.url} 推荐位名称: {dr_mod_value('news', 'setting', 'flag', 1, 'name')} {/module} 其中 news是模块目录,1是推荐位id号
2、前端页面调用模块【news】的【排除推荐位id是1的】的文章内容
{module module=news not_flag=1} {$t.title} {$t.url} {/module} 其中 news是模块目录,1是排除不显示的推荐位id号
3、前端页面调用模块【news】的【id是1和2的】推荐位中的文章内容
{module module=news flag=1,2} {$t.title} {$t.url} {/module} 其中 news是模块目录,1和2是推荐位id号
----如果要显示推荐位名称的循环方式----
{module module=news flag=1,2 show_flag=1} {$t.title} {$t.url} 推荐位名称: {dr_mod_value('news', 'setting', 'flag', $t.flag, 'name')} {/module} 其中 news是模块目录,1和2是推荐位id号
4、普通列表中判断本文章是否被推荐位(请慎用影响查询速度)
{module module=news 其他相关参数} {$t.title} {$t.url} --------- {table table_site=news_flag id=$t.id return=f} 推荐位名称: {dr_mod_value('news', 'setting', 'flag', $f.flag, 'name')} {/table} {/module} 其中 news是模块目录,(请慎用此方法,会影响查询速度)
5、调用文章时将推荐位放在前面显示(请慎用影响查询速度)
{table table_site=$table} {/table} 例如: {module catid=$catid order=$order page=1}
统计量查询标签 - count标签
一、作用
用于查询某表,某条件的数据量
二、语法
{count action=标签类型 ....}
三、参数介绍
标签类型支持: 'sql', 'module', 'member', 'form', 'mform', 'comment', 'table', 'tag', 'related'
支持以上标签的语法作为数据统计参数
比如我们常用的module标签,查询news模块的全部数据写法是:
{module module=news}
那么,改成数据量查询,写法就是:
{count action=module module=news} {$debug_count}
全模块写法:
{count action=module module=all} 全部模块数据量
四、相关例子
1、例如查询news模块的栏目id=222数据总量
{count action=module module=news catid=222} {$debug_count}
2、查询会员数据量
{count action=member} {$debug_count}
3、自定义sql的数据量查询
{count action=sql sql='select * from dr_member'} {$debug_count}
带变量的自定义sql写法
{count action=sql sql='$query'} {$debug_count}
4、任意表的数据量查询
{count action=table table=member} {$debug_count}
5、在用户中心,当前用户的news模块投稿数量
{count action=module module=news uid=$member.uid} {$debug_count}
6、统计全部内容模块数据量
{count action=module module=all} 全部模块数据量
五、标签支持通配符的写法
https://www.xunruicms.com/doc/661.html
1、news模块今日数据量统计
{count action=module module=news DAY_updatetime=0} {$debug_count}
2、news模块统计本月的数据量
{count action=module module=news MONTH_updatetime=0} {$debug_count}
六、不直接输出直接返回变量的写法
比如在模板中需要重复利用这些统计值时,只需要赋值一个变量即可,例如上例中的人一个代码
直接输出:{count action=member} {$debug_count} 变量输出: {count action=member return=mmm} {$mmm_count} {$debug_count} 其中{$mmm_count}就是当前的统计数变量,可以进行判断、计算等操作
field自定义字段输出参数技巧
针对module、table等标签使用join联合表查询时,可以使用field参数来指定字段显示,当两个表字段相同的情况下会优先输出主表的字段,次表字段就不会输出,我们可以为次表字段设置别名来显示,例如:
主表a结构是:
id 自增 name 名称 content 内容
次表b结构是:
id 自增 aid 关联a表的id号 name b表名称(这里和a表字段有重复,默认情况下不会输出这个name值了)
常规关联的标签是这样的:
{table table=a join=b on=id,aid}
这样写的字段会输出:a表的全部字段+b表的aid字段,因为b表的id和name字段跟a表重复,因此这种标签不会输出这两个字段,我们可以指定field来输出字段
{table table=a field=name,b.id,b.name join=b on=id,aid}
这种写法会输出a表的name和b表的id,但是b表的name虽然也指定了,因为重复的原因b表的name还是不会输出,那么我们可以给b表的name指定一个别名
{table table=a field=name,b.id,b.name:bname join=b on=id,aid}
这样就可以把b表的name作为bname字段来显示出来了
还可以自己写field参数
{php $field=urlencode('`dr_a`.`name` as `aname`, `dr_b`.`name` as `bname`');} {table table=a field=$field join=b on=id,aid}
这种写法就是原始sql标准写法
多模块内容循环 - modules标签
一、作用
用于循环查询多个模块内容数据(支持分页查询)
二、语法
{modules module=模块名称1,模块名称2 field=字段1,字段2 ....}{/modules}
三、参数介绍
参数 | 介绍 |
---|---|
module | 模块名称,填写至少两个模块目录以上,例如news,image,book |
site | 站点id,默认当前站点,填写其他站点id表示查询其他站点的模块数据 |
catid | 栏目id,支持多个栏目以小写分号分开,例如1,2,3,4 |
field | 可用字段,多个字段以小写分号分开,默认全部字段 |
order | 排序方式,多个排序以小写分号分开,默认降序排列,例如updatetime_asc表示按更新时间升序排列 |
num | 表示显示数量,支持定点查询,例如1,2表示从第1条记录开始,共显示2条数据 |
more | modules标签不支持 |
flag | 推荐位id,多个推荐位用,分隔 |
not_flag | 排除推荐位id,排除多个推荐位用,分隔 |
join | modules标签不支持 |
on | modules标签不支持 |
page | 当page=1时表示开启分页查询,否则pagesize与urlrule是不会生效的 |
pagesize | 分页显示数据量(当存在catid时会自动取该栏目设置的数量,修改栏目-模块设置-设置数量即可) |
urlrule | 分页地址规则:[page]表示分页标识符(当存在catid时会自动取该栏目设置的URL分页规则) |
sbpage | modules标签不支持 |
cache | 缓存时间单位秒,默认关闭缓存;当cache=3600时,表示缓存时间1小时,建议数据查询的标签都加上缓存参数 |
return | 默认返回变量为t,调用方式就是{$t.字段值} |
四、返回变量
变量 | 参数 |
---|---|
{$debug} | 当查询不到数据时,会返回错误信息,调试模板时很有用哦(写在标签以外) |
{$total} | 用于分页时查询的总记录数量(写在标签以外) |
{$count} | 当前查询的记录,当存在分页时,表示当前页的记录数(写在标签以外) |
{$nums} | 用于分页时返回总的页数(写在标签以外) |
{$pagesize} | 用于分页时返回当前每页查询数量(写在标签以外) |
{$pages} | 显示分页代码(写在标签以外) |
{$key} | 当前记录指针位置,从0开始(写在标签以内) |
{$return} | 当前查询的结果集数组 |
当存在return=字母时,以上变量都要写成这种格式{$变量_字母},例如{...reutrn=a}时,变量格式{$key_a} | |
{$is_first} | 判断是否第一条,{if $is_first}第一条{/if} |
{$is_last} | 判断是否最后一条,{if $is_last}最后一条{/if} |
五、显示字段
在线生成显示字段:https://www.xunruicms.com/doc/code/field.html--t
六、字段查询方法
修饰符 | 介绍 |
---|---|
LIKE_字段 | 模糊匹配查询,例如LIKE_title=%名称%表示like title '%标题%' |
IN_字段 | IN子句查询,例如IN_id=1,2,3,4表示id in (1,2,3,4) |
NOTIN_字段 | NOTE IN子句查询,例如NOTIN_id=1,2,3,4表示id not in (1,2,3,4) |
BEWTEEN_字段 | 两者之间查询,例如BEWTEEN_id=1,100表示id在1到100的数据 |
BW_字段 | 同上,简写 |
NOT_字段 | 逻辑非查询,例如NOT_name=1,表示name不能等1的数据 |
字段=值 | 字段条件查询,例如uid=1表示会员id=1的数据 |
七、部分实例
1、共同查询模块:test,demo,news,num表示显示10条,order表示按更新时间排序,默认cache缓存时间10小时
{modules module=test,demo,news field=title,catid,url,updatetime order=updatetime num=10} 标题:{$t.title} 地址:{$t.url} 更新时间:{$t.updatetime} 自定义更新时间:{dr_date($t._updatetime, 'Y-m-d')} 栏目名称:{dr_cat_value($t.mid, $t.catid, 'name')} 栏目URL:{dr_cat_value($t.mid, $t.catid, 'url')} 模块名称:{dr_mod_value($t.mid, 'name')} 或者 {Cache::get('module-'.SITE_ID.'-'.$t.mid, 'name')} 模块URL(独立模块可用):{dr_mod_value($t.mid, 'url')} 或者 {Cache::get('module-'.SITE_ID.'-'.$t.mid, 'url')} {/modules} {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息
2、共同查询模块:test,demo,news,num表示显示10条,order表示按人气排序
{modules module=test,demo,news field=title,catid,url,updatetime,hits num=10 order=hits} ...... {/modules} {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息
3、共同查询模块:test,demo,news, 自定义分页显示数据(可以在任何页面)
{modules module=test,demo,news field=title,catid,url,updatetime page=1 pagesize=10 urlrule=index.php?page=[page]} ..... {/modules} {$pages}表示分页输出代码 {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息 pagesize表示指定分页显示数据量 urlrule表示分页地址规则,[page]参数必须有哦,否则分页链接不正常
4、共同查询模块:test,demo,news,只显示推荐位1的10条内容(4.3.12起可使用)
{modules module=test,demo,news field=title,catid,url,updatetime,hits flag=1 num=10 order=updatetime} ...... {/modules} {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息
5、共同查询模块:test,demo,news,只显示推荐位1,2,3的10条内容(4.3.12起可使用)
{modules module=test,demo,news field=title,catid,url,updatetime,hits flag=1,2,3 num=10 order=updatetime} ...... {/modules} {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息
6、共同查询模块:test,demo,news,只显示栏目1,2,3的10条内容(4.3.12起可使用)
{modules module=test,demo,news field=title,catid,url,updatetime,hits catid=1,2,3 num=10 order=updatetime} ...... {/modules} {$debug}:表示这段查询的sql语句解析 如果遇到查询错误,它会返回相关信息
如果遇到以下错误时:
Illegal mix of collations for operation “UNION”
说明field参数的字段存在不一样的编码,通过phpmyadmin工具把他们的编码改为一致的就行了
单独调用模块数据
单独调用模块函数:
dr_mod_value("模块目录", "输出字段")
用法举例:
调用指定模块demo的信息
模块名称:{dr_mod_value("demo", "name")} 模块title:{dr_mod_value("demo", "title")} 模块地址:{dr_mod_value("demo", "url")} 移动端地址:{dr_mod_value("demo", "murl")}
求和/累计运算标签 sum标签
一、作用
用于查询某表,某条件的某个字段累计总和。
二、语法
{sum sum=求和字段名称 action=标签类型 ....}
三、参数介绍
标签类型支持: 'sql', 'module', 'member', 'form', 'mform', 'comment', 'table', 'tag', 'related'
支持以上标签的语法作为数据统计参数
比如我们常用的module标签,查询news模块的全部数据的阅读量hits字段总和写法是:
{module module=news}
那么,改成数据量查询,写法就是:
{sum sum=hits action=module module=news} {$debug_sum}
四、相关例子
1、例如查询news模块的栏目id=222数据的阅读量字段hits的总和
{sum sum=hits action=module module=news catid=222} {$debug_sum}
2、查询全部会员的余额总和
{sum sum=money action=member} {$debug_sum}
3、自定义sql的数据量查询
{sum sum=money action=sql sql='select * from dr_member'} {$debug_sum}
4、任意表的数据量查询
{sum sum=money action=table table=member} {$debug_sum}
五、不直接输出直接返回变量的写法
比如在模板中需要重复利用这些统计值时,只需要赋值一个变量即可,例如上例中的人一个代码
直接输出:{sum sum=money action=member} {$debug_sum} 变量输出: {sum sum=money action=member return=mmm} {$mmm_sum} {$debug_sum} 其中{$mmm_sum}就是当前的统计数变量,可以进行判断、计算等操作
评论主题信息调用
标签参数介绍:
{list app=comment action=index table=module|from|mform module=模块目录 form=表单名称 id=主题id号}
用法举例:
1、调用news模块的id=10的评论主题信息
{list app=comment action=index table=module module=news id=10} 评论数:{$t.comments} 支持数:{$t.support} 反对数:{$t.oppose} 平均数:{$t.avgsort} 平均分保留一位小数:{number_format($t.avgsort, 1)} 平均分星星图标:{dr_star_level($t.avgsort, $t.config.review.score == 10)} ---------点评 {loop $t.config.review.option $i $name} 选项名称:{$name} 评分值:{number_format($t['sort'.$i], 1)} 平均分星星图标:{dr_star_level($t['sort'.$i], $t.config.review.score == 10)} {/loop} {/list} {$debug}
2、调用news模块表单test的id=10的评论主题信息
{list app=comment action=index table=mform module=news form=test id=10} 其他参数同(1)
3、调用网站表单test的id=10的评论主题信息
{list app=comment action=index table=form form=test id=10} 其他参数同(1)
默认分页样式css样式
分页标签变量写法:
{$pages}
系统会自动生成分页html文件,查看源代码可以看出效果:
针对这种系统生成出来的分页样式,如果没写css的话,访问页面就会错乱效果,如下图:
解决方案:
方案一、懒人方案
1、直接把下面的css复制到你的css文件中
.pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px; } .pagination > li { display: inline; } .pagination > li > a, .pagination > li > span { position: relative; float: left; padding: 6px 12px; line-height: 1.42857; text-decoration: none; color: #337ab7; background-color: #fff; border: 1px solid #ddd; margin-left: -1px; } .pagination > li:first-child > a, .pagination > li:first-child > span { margin-left: 0; border-bottom-left-radius: 4px; border-top-left-radius: 4px; } .pagination > li:last-child > a, .pagination > li:last-child > span { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } .pagination > li > a:hover, .pagination > li > a:focus, .pagination > li > span:hover, .pagination > li > span:focus { z-index: 2; color: #23527c; background-color: #eeeeee; border-color: #ddd; } .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus { z-index: 3; color: #fff; background-color: #337ab7; border-color: #337ab7; cursor: default; }
2、再访问页面,效果如下:
方案二、个性化方案,自定义分页样式方案
https://www.xunruicms.com/doc/571.html
kws 关键词搜索词调用
在文章发布界面,输入标题时,然后自动输入关键词 或者 自动获取的词语
在文章内容详情页面,可以自动管理到关键词库单页中,show.html
{loop $kws $name $url} {$name} {/loop}
会原样输出:中国、中国人
这里输出的词,是文章内容的关键字字段的全部数据,链接会指向搜索界面的URL。
模板循环变量:空格识别、等号识别
例如循环标签
{tag tag=$tag}
当$tag变量值等于:
book review
两个单词中间存在空格,那么系统就会解析成:
tag就等于了book,后面就分隔开了,如何解决呢,使用 dr_rp_view函数将变量进行保护起来,那么标签改进为:
在前面加上保护代码:
{php $tag=dr_rp_view($tag);}
循环中排序方式修饰符
适用于 module、table、form、mfrom、member、related、category循环标签的排序参数
1、由大到小排列(默认)
order=字段_desc
2、从小得到大排列
order=字段_asc
3、按序列排序,比如按条件查询 id=3,1,2,排列显示按这个id序列排序
order=id_instr
4、任意sql标签排序写法,直接写sql标签
先定义排序字符串变量 {php $px=urlencode("排序sql语句");} order=$px