核心标签系统概述
苹果CMS的标签系统采用类似Smarty的模板语法,所有标签调用均通过{:标签名(参数='值')}格式实现。系统内置标签分为数据调用类、功能类、系统变量类三大类,每类标签都有特定的参数配置方式。
基础标签调用语法
所有标签调用必须遵循以下基本语法结构:
```{:标签名称(参数1='值1', 参数2='值2', ...)}```
参数赋值规则
- 参数名和值之间用等号连接
- 字符串值必须用单引号包裹
- 数字值可直接书写
- 多个参数用逗号分隔
- 参数顺序不影响调用结果
数据调用类标签详解
文章列表标签
```{:lists(table='article', num='10', order='id DESC', where='status=1')}```
table:指定数据表,常用值有article(文章)、video(视频)、topic(专题)
num:调用数量,默认10条
order:排序方式,格式为"字段名 排序方式"
where:查询条件,支持标准SQL WHERE语法
分页参数配置
```{:lists(table='article', num='10', page='true', pagename='page')}```
page:启用分页,设置为'true'
pagename:分页参数名,默认'page'
url:自定义分页链接格式
字段筛选参数
```{:lists(table='article', field='id,title,content', where='id>100')}```
field:指定返回字段,多个字段用逗号分隔
limit:限制查询范围,如'0,10'表示从第0条开始取10条
条件判断标签
if条件标签
```{if condition="$vo.status eq 1"}正常{else}禁用{/if}```
支持的条件运算符:
- eq 或 ==:等于
- neq 或 !=:不等于
- gt:大于
- lt:小于
- egt:大于等于
- elt:小于等于
多条件组合
```{if condition="($vo.status eq 1) AND ($vo.type eq 2)"}显示内容{/if}```
逻辑运算符:AND(与)、OR(或)、NOT(非)
循环输出标签
volist基础循环
```{volist name="list" id="vo"}
{$vo.title}
{/volist}```
name:要遍历的数组变量名
id:当前元素别名
key:可选,当前循环索引
循环状态变量
```{volist name="list" id="vo"}{$i}:{$vo.title} {/volist}```
系统自动生成变量:
- $i:当前循环次数(从1开始)
- $index:当前索引(从0开始)
- $iteration:当前迭代次数
- $total:总记录数
内容详情标签
单条数据调用
```{:detail(table='article', id='$id')}```
id:记录ID,可以是变量或固定值
field:指定返回字段
cache:缓存时间(秒)
关联查询示例
```{:detail(table='article', id='$id', join='category on article.cid=category.id')}```
分类标签调用
分类列表调用
```{:clists(table='category', pid='0', order='sort asc')}```
pid:父级分类ID,0表示顶级分类
level:获取层级,如'1,2'表示获取一级和二级分类
子分类调用
```{:sons(table='category', pid='$cid')}```
系统变量标签
站点配置变量
```{$site.site_name}``` 站点名称
```{$site.site_url}``` 站点URL
```{$site.site_keywords}``` 站点关键词
页面变量
```{$page.title}``` 页面标题
```{$page.keywords}``` 页面关键词
```{$page.description}``` 页面描述
用户信息变量
```{$user.user_name}``` 用户名
```{$user.group_id}``` 用户组ID
```{$user.login_time}``` 最后登录时间
实用函数标签
URL生成函数
```{:url('article/detail', ['id'=>$id])}```
参数说明:
- 第一个参数:控制器/方法
- 第二个参数:URL参数数组
时间格式化
```{:date('Y-m-d H:i:s', $vo.create_time)}```
格式字符说明:
- Y:四位年份
- m:两位月份
- d:两位日期
- H:24小时制小时
- i:分钟
- s:秒数
标签组合实战案例
案例1:带分页的文章列表
```{volist name=":lists(table='article', num='15', page='true', order='id DESC', where='status=1')" id="vo"}
{:msubstr($vo.content, 0, 100)}...
{:date('Y-m-d', $vo.create_time)}
{/volist}
{$page}
```
案例2:多级分类导航
```{volist name=":clists(table='category', pid='0')" id="cat"}
{$cat.name}
{volist name=":clists(table='category', pid='$cat.id')" id="subcat"}
- {$subcat.name}
{/volist}
{/volist}```
案例3:条件筛选列表
```{volist name=":lists(table='video', num='12', where="status=1 AND type='{$type}' AND year='{$year}'", order='hits DESC')" id="vo"}
{/volist}```
高级参数技巧
缓存参数优化
```{:lists(table='article', num='10', cache='3600', order='id DESC')}```
缓存时间单位:秒,建议设置:
- 首页数据:7200(2小时)
- 列表页数据:3600(1小时)
- 详情页数据:1800(30分钟)
SQL直接查询
```{:query("SELECT FROM mac_article WHERE status=1 ORDER BY id DESC LIMIT 10")}```
注意事项:
- 表名需包含前缀
- 避免在循环中使用
- 注意SQL注入防护
调试与优化建议
标签调试方法
在标签后添加debug='true'参数查看原始数据:
```{:lists(table='article', num='5', debug='true')}```
性能优化要点
- 合理使用cache参数减少数据库查询
- 避免在循环中进行复杂查询
- field参数只获取必要字段
- where条件使用索引字段
常见错误排查
- 标签未闭合:确保每个{标签}都有对应的{/标签}
- 参数格式错误:检查单引号、逗号使用是否正确
- 变量未定义:确认$变量是否在上下文中存在
- 表名错误:检查table参数值是否正确