概述与基础
标签语法基础
极有客CMS 使用类似 Smarty 的模板语法:
{变量名} // 输出变量
{$变量名} // 输出变量(带$符号)
{函数名(参数)} // 调用函数
{if 条件}...{/if} // 条件判断
{loop 数组 键 值}...{/loop} // 循环
{php}...{/php} // PHP 代码块
常用变量类型
| 变量类型 | 说明 | 示例 |
|---|---|---|
| $title | 标题 | {$title} |
| $catid | 栏目ID | {$catid} |
| $id | 内容ID | {$id} |
| $t | 循环中的当前项 | {$t.title} |
快速示例
调用文章列表
{module catid=$catid order=inputtime page=1}
<h3>{$t.title}</h3>
<p>{dr_strcut($t.description, 100)}</p>
<a href="{$t.url}">查看详情</a>
{/module}
列表页标签
AI对话提示词:
列表模板标签完整示例:{module catid=$catid order=displayorder,inputtime page=1 more=1}标题:{dr_strcut($t.title, 30)}链接:{$t.url}描述:{dr_strcut($t.description, 80)}描述可写br标签换行:{dr_html_code($t.description)}缩略图原图:{dr_get_file($t.thumb)}缩略图裁剪:{dr_thumb($t.thumb, 640, 360)}是否GIF图:{if substr(dr_get_file($t.thumb),-3)==gif}发布时间:{dr_date($t._inputtime, 'Y-m-d')}分类名称:{dr_share_cat_value($t.catid, 'name')}列表的下载:{loop $t.downfile $i $c}<a href="{dr_down_file($c.file)}">{$c.title}</a>{/loop}视频:{dr_get_file($t['video'])}多站点list链接:{dr_url_prefix($c.url, "news", 1)}隔行换色:{if ($key+1)%2==0}{/if}{/module}分页:{$pages}
列表模板完整示例
| 功能 | 代码 |
|---|---|
| 标题截取 | {dr_strcut($t.title, 30)} |
| 链接 | {$t.url} |
| 描述截取 | {dr_strcut($t.description, 80)} |
| 描述HTML显示 | {dr_html_code($t.description)} |
| 缩略图原图 | {dr_get_file($t.thumb)} |
| 缩略图裁剪 | {dr_thumb($t.thumb, 640, 360)} |
| 判断GIF图 | {if substr(dr_get_file($t.thumb), -3) == 'gif'}...{/if} |
| 发布时间 | {dr_date($t._inputtime, 'Y-m-d')} |
| 分类名称 | {dr_share_cat_value($t.catid, 'name')} |
| 下载文件 | {loop $t.downfile $i $c}<a href="{dr_down_file($c.file)}">{$c.title}</a>{/loop} |
| 视频 | {dr_get_file($t['video'])} |
| 多站点链接 | {dr_url_prefix($c.url, "news", 1)} |
| 隔行换色 | {if ($key+1)%2==0}偶数行{/if} |
| 分页 | {$pages} |
module 标签
用于调用模块内容列表
基本语法
{module catid=$catid order=displayorder,inputtime page=1 more=1}
<!-- 循环内容 -->
{/module}
参数说明
| 参数 | 说明 | 示例 | 必填 |
|---|---|---|---|
| catid | 栏目ID | catid=$catid | 是 |
| order | 排序方式 | order=inputtime | 否 |
| page | 是否分页 | page=1 | 否 |
| num | 显示数量 | num=10 | 否 |
循环变量 $t
在 module 标签内,使用 $t 访问当前项的字段:
| 字段/函数 | 说明 | 示例 |
|---|---|---|
| $t.title | 标题 | {dr_strcut($t.title, 30)} |
| $t.url | 链接地址 | {$t.url} |
| $t.description | 描述/摘要 | {dr_strcut($t.description, 80)} |
| $t.thumb | 缩略图 | {dr_get_file($t.thumb)} |
| $t._inputtime | 发布时间戳 | {dr_date($t._inputtime, 'Y-m-d')} |
| $t.catid | 栏目ID | {dr_share_cat_value($t.catid, 'name')} |
| $t.downfile | 下载文件数组 | {loop $t.downfile $i $c}...{/loop} |
| $t.video | 视频字段 | {dr_get_file($t['video'])} |
| $key | 循环索引(从0开始) | {if ($key+1)%2==0}偶数行{/if} |
常用函数详解
描述HTML代码显示
{dr_html_code($t.description)}
允许描述中的HTML标签(如br)正常显示
判断GIF图片
{if substr(dr_get_file($t.thumb), -3) == 'gif'}
<img src="{dr_get_file($t.thumb)}" alt="GIF动图">
{else}
<img src="{dr_thumb($t.thumb, 640, 360)}" alt="静态图">
{/if}
GIF图片不裁剪,保持动画效果
下载文件循环
{loop $t.downfile $i $c}
<div class="download-item">
<span>{$i}. {$c.title}</span>
<a href="{dr_down_file($c.file)}" class="btn">下载</a>
</div>
{/loop}
循环显示所有下载文件
多站点链接
{dr_url_prefix($c.url, "news", 1)}
参数:URL、模块名、站点ID
隔行换色
<div class="{if ($key+1)%2==0}even{else}odd{/if}">
{$t.title}
</div>
使用 $key 索引实现奇偶行不同样式
{module catid=$catid}
标题:{$t.title}
链接:{$t.url}
描述:{$t.description}
缩略图:{dr_thumb($t.thumb, 300, 200)}
发布时间:{dr_date($t._inputtime, 'Y-m-d')}
{/module}
常用函数
字符串截取
{dr_strcut($t.title, 30)}
{dr_strcut($t.description, 80)}
图片缩略图
<!-- 300x200 缩略图 -->
<img src="{dr_thumb($t.thumb, 300, 200)}" alt="{$t.title}">
<!-- 带水印的缩略图 -->
<img src="{dr_thumb($t.thumb, 300, 200, 1)}" alt="{$t.title}">
分页
{$pages}
注意:必须在 module 标签中添加 page=1 参数才能启用分页。
列表收藏功能
判断当前内容是否已被收藏:
{if \Phpcmf\Service::M()->db
->table(SITE_ID.'_'.MOD_DIR.'_favorite')
->where('cid', $t.id)
->where('uid', $member.uid)
->countAllResults()}
已收藏
{else}
<a href="javascript:dr_app_favorite({$t.id})">收藏</a>
{/if}
收藏功能JavaScript
<script>
// 模块列表收藏
function dr_app_favorite(id) {
$.get("{dr_url_prefix('index.php')}?is_ajax=1&s=api&app={MOD_DIR}&c=module&m=favorite&id=" + id,
function(data) {
dr_cmf_tips(data.code, data.msg);
if (data.code) {
// $('#module_favorite_' + id).html(data.data);
window.location.reload(); // 刷新页面
} else {
// 收藏失败处理
}
},
'json'
);
}
</script>
完整收藏按钮示例
{module catid=$catid order=inputtime page=1}
<div class="item">
<h3>{$t.title}</h3>
<p>{dr_strcut($t.description, 100)}</p>
<!-- 收藏按钮 -->
<div class="favorite-btn" id="module_favorite_{$t.id}">
{if $member}
{if \Phpcmf\Service::M()->db
->table(SITE_ID.'_'.MOD_DIR.'_favorite')
->where('cid', $t.id)
->where('uid', $member.uid)
->countAllResults()}
<span class="collected">已收藏</span>
{else}
<a href="javascript:dr_app_favorite({$t.id})">
<i class="fa fa-heart-o"></i> 收藏
</a>
{/if}
{else}
<a href="{dr_member_url('login/index')}">登录后收藏</a>
{/if}
</div>
</div>
{/module}
说明
- SITE_ID - 站点ID
- MOD_DIR - 模块目录名
- $member.uid - 当前登录用户ID
- $t.id - 内容ID
- 需要用户登录后才能使用收藏功能
详情页标签
AI对话提示词:
详情页标签:基本字段{$title}{$author}{$content}{$description}{$keywords}时间{dr_date($_inputtime, 'Y-m-d')}访问量{dr_show_hits($id)}多图{loop $pics $i $c}序号{$i}标题{$c.title}描述{$c.description}原图{dr_get_file($c.file)}缩略图{dr_thumb($c.file, 200, 200)}带水印{dr_thumb($c.file, 200, 200, 1)}{/loop}上下篇{if $prev_page}{$prev_page.url}{$prev_page.title}{/if}{if $next_page}{$next_page.url}{$next_page.title}{/if}
基本字段
| 字段 | 说明 |
|---|---|
| {$title} | 标题 |
| {$author} | 作者 |
| {$content} | 内容(富文本HTML) |
| {$description} | 描述/摘要 |
| {$keywords} | 关键词 |
| {dr_date($_inputtime, 'Y-m-d')} | 发布时间 |
| {dr_show_hits($id)} | 访问量/点击量 |
多图字段
{loop $pics $i $c}
序号: {$i}
标题:{$c.title}
描述:{$c.description}
原图:{dr_get_file($c.file)}
缩略图:{dr_thumb($c.file, 200, 200)}
带水印:{dr_thumb($c.file, 200, 200, 1)}
{/loop}
上一篇/下一篇
<p>
<strong>上一篇:</strong>
{if $prev_page}
<a href="{$prev_page.url}">{$prev_page.title}</a>
{else}
没有了
{/if}
<br>
<strong>下一篇:</strong>
{if $next_page}
<a href="{$next_page.url}">{$next_page.title}</a>
{else}
没有了
{/if}
</p>
首页标签
AI对话提示词:
首页标签:幻灯片{php $hdtp = dr_site_value('hdtp');}{loop $hdtp $v}图片{dr_get_file($v[1])}标题{$v[2]}链接{$v[3]}{/loop}站点信息{SITE_NAME}{SITE_ICP}{SITE_LOGO}{SITE_TONGJI}{dr_site_info('address')}{dr_site_info('tel')}{dr_site_info('email')}{dr_get_file(dr_site_info('ewm'))}首页独立内容{php $indexcontent = dr_site_value('indexcontent');}{dr_get_file($indexcontent[1][1])}{$indexcontent[1][2]}
幻灯片
{php $hdtp = dr_site_value('hdtp');}
{loop $hdtp $v}
图片URL: {dr_get_file($v[1])}
标题: {$v[2]}
链接: {$v[3]}
{/loop}
站点信息
| 常量 | 说明 |
|---|---|
| {SITE_NAME} | 站点名称 |
| {SITE_ICP} | 备案号 |
| {SITE_LOGO} | 站点LOGO |
| {SITE_TONGJI} | 统计代码 |
| {dr_site_info('address')} | 地址 |
| {dr_site_info('tel')} | 电话 |
| {dr_site_info('email')} | 邮箱 |
| {dr_get_file(dr_site_info('ewm'))} | 二维码 |
首页独立内容
{php $indexcontent = dr_site_value('indexcontent');}
<!-- 第一个内容的第一个字段 -->
{dr_get_file($indexcontent[1][1])}
<!-- 第一个内容的第二个字段 -->
{$indexcontent[1][2]}
搜索页标签
AI对话提示词:
搜索页标签:搜索表单<form name="searchform" action="/index.php" method="get"><input type="hidden" name="s" value="news"><input type="hidden" name="c" value="search"><input type="text" name="keyword" placeholder="请输入关键词"/><button type="submit">搜索</button></form>搜索结果{search module=MOD_DIR id=$searchid total=$sototal page=1 pagesize=12}{$t.url}{$t.title}{dr_strcut($t.description, 80)}{$t.updatetime}{intval($t.comments)}{intval($t.hits)}{/search}关键词高亮{str_ireplace($keyword, "<span class='highlight'>".$keyword."</span>", $t.title)}分页{$pages}
搜索表单
<form name="searchform" action="/index.php" method="get">
<input type="hidden" name="s" value="news">
<input type="hidden" name="c" value="search">
<input type="text" name="keyword" placeholder="请输入关键词"/>
<button type="submit">搜索</button>
</form>
参数说明
| 参数 | 说明 |
|---|---|
| name="s" | 模块名称(news、share等) |
| name="c" | 控制器名称(固定为search) |
| name="keyword" | 搜索关键词字段 |
搜索结果
{search module=MOD_DIR id=$searchid total=$sototal page=1 pagesize=12}
链接:{$t.url}
标题:{$t.title}
描述:{dr_strcut($t.description, 80)}
更新时间:{$t.updatetime}
评论数:{intval($t.comments)}
浏览量:{intval($t.hits)}
{/search}
关键词高亮
{str_ireplace($keyword, "<span class='highlight'>".$keyword."</span>", $t.title)}
分页
{$pages}
栏目标签
AI对话提示词:
栏目标签:{category module=share pid=0}{$t.url}{$t.name}{/category}栏目信息{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"))}栏目内容截取{dr_strcut(dr_html2text(dr_share_cat_value(17, 'content')), 480, '...')}栏目数据量{count action=module module=模块目录 catid=999}栏目SEO{dr_share_cat_value(999, "setting", "seo", "list_title")}{dr_share_cat_value(999, "setting", "seo", "list_keywords")}{dr_share_cat_value(999, "setting", "seo", "list_description")}高亮判断{if IS_SHARE && $catid && dr_in_array($catid, $t.catids)}active{/if}
category 标签
{category module=share pid=0}
<a href="{$t.url}">{$t.name}</a>
{/category}
参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
| module | 模块名 | share, news |
| pid | 父栏目ID | 0, $top.id |
| num | 显示数量 | num=0,5 |
| return | 返回变量名 | return=t2 |
栏目信息函数
栏目名称:{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"))}
栏目内容截取
调用栏目纯文字内容并截取字数:
{dr_strcut(dr_html2text(dr_share_cat_value(17, 'content')), 480, '...')}
说明:
- dr_html2text() - 将HTML转为纯文本
- dr_strcut() - 截取指定长度
- 参数:栏目ID、字段名、截取长度、后缀
栏目数据量统计
{count action=module module=模块目录 catid=999}
返回指定栏目下的内容数量
栏目SEO属性
| 属性 | 代码 | 说明 |
|---|---|---|
| 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")} | 栏目列表页描述 |
完整示例
<!-- 栏目SEO信息 -->
<title>{dr_share_cat_value($catid, "setting", "seo", "list_title")}</title>
<meta name="keywords" content="{dr_share_cat_value($catid, "setting", "seo", "list_keywords")}" />
<meta name="description" content="{dr_share_cat_value($catid, "setting", "seo", "list_description")}" />
<!-- 栏目内容摘要 -->
<p>{dr_strcut(dr_html2text(dr_share_cat_value($catid, 'content')), 200, '...')}</p>
<!-- 栏目文章数量 -->
<span>共 {count action=module module=news catid=$catid} 篇文章</span>
高亮判断
<li class="{if IS_SHARE && $catid && dr_in_array($catid, $t.catids)}active{/if}">
<a href="{$t.url}">{$t.name}</a>
</li>
表单留言板
AI对话提示词:
表单留言板:基础模板<form action="{$post_url}&is_show_msg={urlencode($rt_url)}" method="post" name="myform" id="myform">{$form}{$myfield}{$diyfield}{$sysfield}{if $is_post_code}<input type="text" name="code">{dr_code(120, 35)}{/if}<button type="submit">立即提交</button></form>获取表单数据{php extract(dr_get_form_post_value('guestbook'))}验证码{dr_code(120, 35)}
表单配置导入
导入以下JSON配置创建留言表单:
{"id":"1","name":"用户留言","table":"guestbook",
"setting":{
"web":"1",
"post_add":["1","1"],
"post_code":["1","1"],
"seo":{
"title":"{title}{join}{formname}{join}{SITE_NAME}",
"keywords":"",
"description":""
},
"icon":"",
"dev":"0",
"rt_text":"",
"rt_text2":"",
"rt_url":"",
"is_hide_search_bar":"0",
"list_field":{
"uid":{"use":"1","name":"账号","width":"100","func":"uid"},
"inputtime":{"use":"1","name":"录入时间","width":"160","func":"datetime"},
"id":{"name":"Id","width":"","func":""},
"displayorder":{"name":"排列值","width":"","func":""},
"xingming":{"name":"姓名","width":"","func":""},
"shouji":{"name":"手机","width":"","func":""},
"neirong":{"name":"内容","width":"","func":""},
"inputip":{"name":"客户端IP","width":"","func":""},
"email":{"name":"邮箱","width":"","func":""}
},
"notice":{
"is_send":"1",
"username":"admin",
"email":"1"
}
},
"field":[
{
"id":"24","name":"主题","fieldname":"title","fieldtype":"Text",
"relatedid":"1","relatedname":"form-1","isedit":"1","ismain":"1",
"issystem":"1","ismember":"1","issearch":"1","disabled":"1",
"setting":"{\"option\":{\"width\":300,\"fieldtype\":\"VARCHAR\",\"fieldlength\":\"255\"},\"validate\":{\"xss\":1,\"required\":1}}",
"displayorder":"0"
},
{
"id":"26","name":"姓名","fieldname":"xingming","fieldtype":"Text",
"relatedid":"1","relatedname":"form-1","isedit":"1","ismain":"1",
"issystem":"0","ismember":"1","issearch":"0","disabled":"0",
"setting":"{\"option\":{\"fieldtype\":\"\",\"fieldlength\":\"\",\"value\":\"\",\"width\":\"95%\",\"css\":\"\"},\"validate\":{\"xss\":\"1\",\"required\":\"1\",\"pattern\":\"\",\"errortips\":\"姓名不能为空\",\"check\":\"\",\"filter\":\"\",\"tips\":\"\",\"formattr\":\"\"}}",
"displayorder":"1"
},
{
"id":"27","name":"手机","fieldname":"shouji","fieldtype":"Text",
"relatedid":"1","relatedname":"form-1","isedit":"1","ismain":"1",
"issystem":"0","ismember":"1","issearch":"0","disabled":"0",
"setting":"{\"option\":{\"fieldtype\":\"\",\"fieldlength\":\"\",\"value\":\"\",\"width\":\"95%\",\"css\":\"\"},\"validate\":{\"xss\":\"1\",\"required\":\"1\",\"pattern\":\"/^1[3|4|5|8][0-9]\\\\\\\\d{4,8}$/\",\"errortips\":\"请输入正确的手机号\",\"check\":\"\",\"filter\":\"\",\"tips\":\"\",\"formattr\":\"\"}}",
"displayorder":"2"
},
{
"id":"30","name":"邮箱","fieldname":"email","fieldtype":"Text",
"relatedid":"1","relatedname":"form-1","isedit":"1","ismain":"1",
"issystem":"0","ismember":"1","issearch":"0","disabled":"0",
"setting":"{\"option\":{\"fieldtype\":\"\",\"fieldlength\":\"\",\"value\":\"\",\"width\":\"\",\"css\":\"\"},\"validate\":{\"xss\":\"1\",\"required\":\"1\",\"pattern\":\"/^\\\\\\\\w+([-+.]\\\\\\\\w+)*@\\\\\\\\w+([-.]\\\\\\\\w+)*\\\\\\\\.\\\\\\\\w+([-.]\\\\\\\\w+)*$/\",\"errortips\":\"请输入正确的邮箱\",\"check\":\"\",\"filter\":\"\",\"tips\":\"\",\"formattr\":\"\"}}",
"displayorder":"3"
},
{
"id":"29","name":"内容","fieldname":"neirong","fieldtype":"Textarea",
"relatedid":"1","relatedname":"form-1","isedit":"1","ismain":"1",
"issystem":"0","ismember":"1","issearch":"0","disabled":"0",
"setting":"{\"option\":{\"value\":\"\",\"fieldtype\":\"\",\"fieldlength\":\"\",\"width\":\"95%\",\"height\":\"200\",\"css\":\"\"},\"validate\":{\"xss\":\"1\",\"required\":\"1\",\"pattern\":\"\",\"errortips\":\"内容不能为空\",\"check\":\"\",\"filter\":\"\",\"tips\":\"\",\"formattr\":\"\"}}",
"displayorder":"4"
}
]}
基础留言模板
<form action="{$post_url}&is_show_msg={urlencode($rt_url)}"
method="post"
name="myform"
id="myform">
{$form}
{$myfield}
{$diyfield}
{$sysfield}
{if $is_post_code}
<input type="text" name="code">
{dr_code(120, 35)}
{/if}
<button type="submit">立即提交</button>
</form>
完整HTML留言模板
<div class="inner_message">
<div class="title">在线留言</div>
<div class="list wrap">
<ul>
{php extract(dr_get_form_post_value('guestbook'))}
<form action="{$post_url}&is_show_msg={urlencode($rt_url)}"
class="form-horizontal"
method="post"
name="myform"
id="myform">
<input name="is_form" type="hidden" value="1">
<input name="is_admin" type="hidden" value="1">
<input name="is_tips" type="hidden" value="">
<input name="csrf_test_name" type="hidden"
value="4665a162b86b0e7dc9a1a085c1be13fc">
<li>
<div class="text">您的姓名</div>
<input class="input"
type="text"
name="data[xingming]"
id="dr_xingming"
value=""
required="required" />
</li>
<li>
<div class="text">您的电话</div>
<input class="input"
type="text"
name="data[shouji]"
id="dr_shouji"
value=""
required="required" />
</li>
<li>
<div class="text">您的邮箱</div>
<input class="input"
type="text"
name="data[email]"
id="dr_email"
value=""
required="required" />
</li>
<li>
<div class="text">留言内容</div>
<textarea class="textarea"
style="height:200px; width:100%;"
name="data[neirong]"
id="dr_neirong"></textarea>
</li>
<li>
<div class="text">验证码</div>
<input class="input"
type="text"
name="code"
value=""
required="required"
style="width: 50%;" />
{dr_code(120, 35)}
</li>
</ul>
<div class="btn">
<button type="submit">立即提交</button>
</div>
</form>
</div>
</div>
邮件通知模板
在后台配置邮件通知,使用以下HTML模板:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<title>邮箱内容提醒</title>
</head>
<body>
发送人ID:{$uid}<br>
发送人账号:{$username}<br>
发送人IP:{$ip_address}<br>
姓名:{xingming}<br>
手机:{shouji}<br>
邮箱:{email}<br>
内容:{neirong}<br>
</body>
</html>
表单字段说明
| 字段 | 说明 | 类型 |
|---|---|---|
| $post_url | 表单提交地址 | 自动生成 |
| $rt_url | 提交成功后跳转地址 | 可配置 |
| $form | 表单HTML代码 | 自动生成 |
| $myfield | 自定义字段 | 自动生成 |
| $diyfield | DIY字段 | 自动生成 |
| $sysfield | 系统字段 | 自动生成 |
| $is_post_code | 是否启用验证码 | 布尔值 |
获取表单数据
{php extract(dr_get_form_post_value('guestbook'))}
参数说明:guestbook 为表单标识(table名称)
验证码函数
{dr_code(120, 35)}
参数:宽度120px,高度35px
公共标签
AI对话提示词:
公共标签:会员列表{list action=member groupid=1 more=1 num=50}{$t.name}<a href="/index.php?s=hy&c=show&uid={$t.id}"></a>{/list}会员组判断{if $member && dr_in_array(2, $member['groupid'])}{/if}会员链接{dr_member_url('register/index')}{dr_member_url('login/index')}{dr_member_url('login/find')}微信登录{Router::oauth_url('weixin', 'login', 'dr_share_cat_value(50, url)')}SEO{$meta_title}{$meta_keywords}{$meta_description}路径{HOME_THEME_PATH}{THEME_PATH}{LANG_PATH}版权{SITE_NAME}{SITE_ICP}
会员相关标签
会员列表调用
{list action=member groupid=1 more=1 num=50}
{$t.name}
<a href="/index.php?s=hy&c=show&uid={$t.id}">查看详情</a>
{/list}
发帖排行榜
<?php
$sql = urlencode('SELECT COUNT(*) as ct,uid
FROM `'.\Phpcmf\Service::M()->dbprefix(SITE_ID.'_模块名称').'`
GROUP by uid
ORDER BY `ct` DESC
limit 20');
?>
{sql sql='$sql' cache=100}
{php
$tx = dr_avatar($t.uid);
$user = dr_member_info($t.uid);
}
{if $user.name}
<li>
<div class="author-img">
<a target="_blank" href="#">
<img width="60" height="60"
src="{dr_thumb($user.logo, auto, auto)}" />
</a>
</div>
<h6>
<a target="_blank" href="#">
{$user.name} {$user.id}
</a>
</h6>
<span class="comment">{$t.ct}</span>
</li>
{/if}
{/sql}
第三方登录
开发平台登录并返回
{Router::oauth_url('weixin', 'login', 'dr_share_cat_value(50, url)')}
微信扫码登录
<a href="__javascript:;dr_wx_login()">微信扫码登录</a>
<script>
function dr_wx_login() {
layer.open({
type: 2,
title: '微信扫码登录',
shadeClose: false,
shade: 0.8,
area: ['380px', '430px'],
content: '{SITE_URL}/index.php?s=api&c=oauth&m=index&name=wechat&type=login&back='
});
}
</script>
判断会员组
{if $member && dr_in_array(2, $member['groupid'])}
<!-- 会员属于组ID为2的会员组 -->
{/if}
会员相关链接
| 功能 | 代码 |
|---|---|
| 注册页面 | {dr_member_url('register/index')} |
| 登录页面 | {dr_member_url('login/index')} |
| 找回密码 | {dr_member_url('login/find')} |
| 登录并返回 | {dr_member_url("login/index", ["back" => urlencode("跳转地址")])} |
| 注册并返回 | {dr_member_url("register/index", ["back" => urlencode("跳转地址")])} |
顶部注册登录按钮
{if $member}
您好 <a href="" class="username">{$member.username}</a>
<a href="/index.php?s=member&app=favorite&c=home&m=index">
<i class="bi bi-heart-fill"></i> 收藏夹
</a>
<a href="{MEMBER_URL}">
<i class="fa fa-user"></i> 个人中心
</a>
<a href="__javascript:;" onclick=dr_loginout('退出成功')>
<i class="fa fa-user-times"></i> 退出
</a>
{else}
<a class='log register__btn'
href="{dr_member_url('register/index')}">
<span><i class="bi bi-cursor-fill"></i> 注册</span>
</a>
<a href="{dr_member_url('login/index')}">
<span class="reg"><i class="fa fa-user"></i> 登录</span>
</a>
{/if}
SEO标签
<title>{$meta_title}</title>
<meta name="keywords" content="{$meta_keywords}" />
<meta name="description" content="{$meta_description}" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1" />
路径常量
| 常量 | 说明 | 示例 |
|---|---|---|
| {HOME_THEME_PATH} | 当前主题路径 | /template/pc/gyouke/ |
| {THEME_PATH} | 模板根路径 | /template/ |
| {LANG_PATH} | 语言包路径 | /template/pc/gyouke/lang/ |
使用示例
<!-- CSS -->
<link href="{HOME_THEME_PATH}css/style.css" rel="stylesheet">
<!-- JS -->
<script src="{HOME_THEME_PATH}js/script.js"></script>
<!-- 图片 -->
<img src="{HOME_THEME_PATH}images/logo.png" alt="Logo">
版权信息
Copyright © {date('Y')} {SITE_NAME} All Rights Reserved.
<a href="https://beian.miit.gov.cn" target="_blank">{SITE_ICP}</a>
系统必需JS
<!-- 系统关键js(所有自建模板必须引用) -->
<script type="text/javascript">var is_mobile_cms = '{IS_MOBILE}';</script>
<script src="{LANG_PATH}lang.js"></script>
<script src="{THEME_PATH}assets/global/plugins/jquery.min.js"></script>
<script src="{THEME_PATH}assets/js/cms.js"></script>
函数参考
字符串处理
dr_strcut() - 截取字符串
{dr_strcut($string, $length, $suffix)}
| 参数 | 说明 | 类型 | 必填 |
|---|---|---|---|
| $string | 要截取的字符串 | string | 是 |
| $length | 截取长度 | int | 是 |
| $suffix | 后缀(默认 ...) | string | 否 |
示例
{dr_strcut($t.title, 30)}
{dr_strcut($t.description, 100, '...')}
图片处理
dr_get_file() - 获取文件完整URL
{dr_get_file($file)}
示例
<img src="{dr_get_file($t.thumb)}" alt="">
dr_thumb() - 生成缩略图
{dr_thumb($file, $width, $height, $watermark)}
| 参数 | 说明 | 类型 | 必填 |
|---|---|---|---|
| $file | 图片路径 | string | 是 |
| $width | 宽度 | int | 是 |
| $height | 高度 | int | 是 |
| $watermark | 是否加水印(0或1) | int | 否 |
示例
<!-- 300x200 缩略图 -->
<img src="{dr_thumb($t.thumb, 300, 200)}" alt="">
<!-- 带水印的缩略图 -->
<img src="{dr_thumb($t.thumb, 300, 200, 1)}" alt="">
时间处理
dr_date() - 格式化时间
{dr_date($timestamp, $format)}
| 格式 | 说明 | 示例 |
|---|---|---|
| Y | 四位年份 | 2026 |
| m | 两位月份 | 02 |
| d | 两位日期 | 04 |
| H | 24小时制小时 | 15 |
| i | 分钟 | 30 |
| s | 秒 | 45 |
示例
{dr_date($t._inputtime, 'Y-m-d')}
{dr_date($t._inputtime, 'Y-m-d H:i:s')}
{dr_date($t._inputtime, 'Y年m月d日')}
函数速查表
| 函数 | 用途 | 示例 |
|---|---|---|
| dr_strcut() | 截取字符串 | {dr_strcut($t.title, 30)} |
| dr_get_file() | 获取文件URL | {dr_get_file($t.thumb)} |
| dr_thumb() | 生成缩略图 | {dr_thumb($t.thumb, 300, 200)} |
| dr_date() | 格式化时间 | {dr_date($t._inputtime, 'Y-m-d')} |
| dr_share_cat_value() | 获取栏目字段 | {dr_share_cat_value(1, 'name')} |
| dr_show_hits() | 显示点击量 | {dr_show_hits($id)} |