47
全局标签
26
循环标签
4
点号标签系列
11
完整示例
点选标签卡片加入组合,一键复制

通用全局

全站通用的站点信息、SEO 与统计标签,任何页面可直接使用。

{xiis:网站标题}sitetitle

网站标题

{xiis:网站关键词}sitekeywords

网站关键词

{xiis:网站描述}sitedescription

网站描述

{xiis:网站地址}siteurl

网站地址

{xiis:网站标志}sitelogo

网站 Logo 图片地址

{xiis:网站邮箱}siteemail

网站联系邮箱

{xiis:网站电话}sitephone

网站联系电话

{xiis:网站图标}sitefavicon / favicon

网站 favicon 图标地址

{xiis:OG图片}ogimage / siteogimage

Open Graph 图片地址

{xiis:备案号}icp / siteicp

ICP 备案号

{xiis:公安备案}policeicp / sitepoliceicp

公安备案号

{xiis:版权信息}copyright / sitecopyright

版权信息

{xiis:联系地址}siteaddress / address

联系地址

{xiis:统计代码}analytics / siteanalytics

网站统计代码

{xiis:SEO标题}seotitle / siteseotitle

SEO 专用标题

{xiis:内容总数}contentcount

已发布内容总数

{xiis:栏目总数}categorycount

栏目总数

{xiis:标签总数}tagcount

标签总数

{xiis:用户总数}usercount

注册用户总数

{xiis:单页总数}pagecount

独立单页总数

{xiis:模板头部}header

模板头部公共内容

{xiis:模板底部}footer

模板底部公共内容

{xiis:附件下载总数}attachmentdownloadtotal / downloadtotal / 附件下载量 / 下载总数

本篇内容全部附件下载数之和(全局标签,2026-10-11 新增)

配置与变量标签

站点配置表(config_key)与模板变量表(var_name)中的自定义项,可直接用 {xiis:键名} 输出;中文标签名会自动转换为键名(如 网站标题 → site_name),按站点隔离取值,敏感键(密钥/密码等)会被安全校验拦截。

{xiis:配置键}system_configs.config_key

系统配置项标签:按站点配置表的 config_key 取值(路由前缀、开关、尺寸等均可直接输出)。查找顺序为配置表 → 模板变量表 → 原样保留;未配置时输出空。常用取值示例:

路由前缀 route_tag 内容前缀 route_content 中文名自动转键
{xiis:变量名}template_vars.var_name

模板变量标签:当配置表中未命中时,按模板变量表的变量名取值,适合存放站点自定义文案与联系方式。变量在后台模板变量中维护,改值无需改模板。常用取值示例:

站点口号 site_slogan 联系QQ contact_qq 公司名称 company_name

导航页脚

导航菜单、面包屑与页脚常用标签。

{xiis:当前位置}breadcrumb / position

面包屑导航,参数:分隔符/链接样式/分隔符样式/当前项样式/面包屑首页/显示当前项

{xiis:页面激活?active: page=''}pageactive(行内三元)

判断当前页面标识,导航高亮:页面='别名'

{xiis:导航列表}…{/xiis:导航列表}nav

导航菜单循环,字段:[导航:名称] [导航:链接] [导航:智能链接] [导航:别名]

{xiis:导航子分类}navchildren

导航子分类(嵌套在导航列表内),字段:[导航子分类:名称] [导航子分类:智能链接]

{xiis:单页列表 导航显示="1"}pagelist / pages

导航显示的单页循环,字段:[单页:名称] [单页:页面链接] [单页:封面图]

{xiis:友情链接}friendlylink / friendlink / flink

友情链接循环(页脚常用)

{xiis:热门搜索}hotsearch / hotkeyword / 热门搜索词

热门搜索词循环,字段:[搜索:关键词] [搜索:链接]

栏目列表页

栏目页(category.html)核心标签:栏目信息、内容列表、分页与子栏目。

{xiis:内容列表}…{/xiis:内容列表}list / contentlist

内容列表(核心循环标签)。参数:数量/起始/排序/排列方式/栏目/标签id/关键词/状态/启用分页/标题字数/摘要字数/文字属性/时间格式/包含子栏目

[内容:标题] [内容:智能链接] [内容:摘要] [内容:封面图] [内容:发布时间] [内容:作者] [内容:点击量] [内容:评论量] [内容:分类名称] [内容:分类ID] [内容:顶级分类ID] [内容:顶级分类名称] [内容:分类智能链接] [内容:标签列表智能链接] [内容:自增id]
{xiis:栏目列表}category / categorylist

栏目列表循环。参数:数量/父ID/栏目ID(逗号分隔)。字段:[栏目:名称] [栏目:智能链接] [栏目:内容数量] [栏目:是否有子分类] [栏目:子分类列表]

{xiis:子分类列表}subcategory(嵌套)

子分类嵌套循环,配合栏目列表实现多级菜单

{xiis:页面分类列表}pagecategorylist

页面分类筛选循环。参数:分类id(catid) / 父ID(parentid) / 数量(num) / 子栏目(children) / 自动感知(autosense) / 含自身(include_self)。字段芯片可点击加入:

名称 name 链接 url 编号 id 别名 slug 图标 icon 封面图 cover 栏目简介 intro 排序 sort 内容数量 count 是否有子分类 has_children 激活 active 激活含祖先 active_with_ancestor 顶层名称 top_name 顶层链接 top_url 父层名称 parent_name 父层链接 parent_url
{xiis:栏目分页}categorypagination / catpagination

栏目分页 HTML。参数:页码数量/信息文字/上一页文字/下一页文字/样式类等

{xiis:页面内容总数}pagecontentcount

当前页面内容总数

{xiis:页面分类顶层激活?active:}pagecategorytopactive(三元)

页面分类顶层激活状态(当前栏目为根分类时高亮,适用于面包屑/导航场景)

{xiis:页面分类顶层名称}pagecategorytopname

当前栏目顶层祖先名称(当前栏目为顶层时返回自身)

{xiis:页面分类顶层链接}pagecategorytopurl

当前栏目顶层祖先链接(当前栏目为顶层时返回自身链接)

{xiis:页面分类归属激活?active:}pagecategoryowneractive(三元)

筛选标签列表归属栏目激活("全部"按钮高亮;二级栏目页高亮自身)

{xiis:页面分类归属链接}pagecategoryownerurl

筛选标签列表归属栏目链接("全部"按钮:有子栏目→当前栏目;叶子→父栏目)

{xiis:页面分类父层名称}pagecategoryparentname

当前栏目直接父分类名称(顶层栏目返回空)

{xiis:页面分类父层链接}pagecategoryparenturl

当前栏目直接父分类链接(顶层栏目返回空)

栏目点号标签

栏目列表页/详情页点号标签:{xiis:栏目.字段名} 直接输出当前栏目字段,无需循环包裹。严格白名单,不支持动态字段回退。

中文标签英文标签说明
{xiis:栏目.ID}category.id栏目 ID(中文别名:{xiis:栏目.编号})
{xiis:栏目.名称}category.name栏目名称(兼容:{xiis:栏目.栏目名称})
{xiis:栏目.别名}category.slugURL 别名
{xiis:栏目.描述}category.description栏目描述
{xiis:栏目.图标}category.icon栏目图标
{xiis:栏目.SEO标题}category.seo_titleSEO 标题
{xiis:栏目.SEO关键词}category.seo_keywordsSEO 关键词
{xiis:栏目.SEO描述}category.seo_descriptionSEO 描述
{xiis:栏目.主页模板}category.tempindex主页模板
{xiis:栏目.列表模板}category.templist列表模板
{xiis:栏目.详情模板}category.temparticle详情模板
{xiis:栏目.是否静态}category.is_static是否静态生成
{xiis:栏目.是否允许投稿}category.allow_contribute是否允许投稿
{xiis:栏目.栏目简介}category.intro栏目简介
{xiis:栏目.栏目目录}category.typedir栏目目录
{xiis:栏目.列表规则}category.listrule列表页 URL 规则
{xiis:栏目.每页条数}category.pagesize每页显示条数
{xiis:栏目.URL规则}category.urlrule文章 URL 规则
{xiis:栏目.封面图}category.cover封面图地址
{xiis:栏目.父栏目ID}category.parent_id父栏目 ID
{xiis:栏目.内容类型ID}category.type内容类型 ID
{xiis:栏目.排序值}category.sort_order排序值
{xiis:栏目.内容数量}category.content_count栏目下内容数量
{xiis:栏目.状态}category.status栏目状态(0-禁用 1-启用)
{xiis:栏目.智能链接}category.smart_link智能链接,由 slug_link_enabled 驱动

内容详情页

内容详情页(article.html)点号标签:{xiis:内容.字段名} 直接输出,无需循环。

基础字段
中文标签英文标签说明
{xiis:内容.标题}content.title内容标题
{xiis:内容.别名}content.slugURL 别名
{xiis:内容.摘要}content.excerpt内容摘要
{xiis:内容.内容}content.content内容正文
{xiis:内容.封面图片}content.cover封面图片
{xiis:内容.智能链接}content.smart_link智能链接(配置驱动)
{xiis:内容.链接}content.link内容链接(基于ID)
{xiis:内容.别名链接}content.slug_link别名链接(slug)
{xiis:内容.作者名称}content.author作者名称
{xiis:内容.作者头像}content.avatar作者头像
{xiis:内容.浏览次数}content.views浏览次数
{xiis:内容.点赞次数}content.likes点赞次数
{xiis:内容.评论次数}content.comments评论次数
{xiis:内容.收藏次数}content.collects收藏次数
{xiis:内容.分享次数}content.shares分享次数
{xiis:内容.下载次数}content.downloads下载次数
{xiis:内容.发布时间}content.published_at发布时间(支持字段级格式)
{xiis:内容.分类名称}content.catname分类名称
{xiis:内容.分类智能链接}content.category_smart_link分类智能链接
{xiis:内容.标签列表智能链接}content.tag_list_smart_link标签列表智能链接
{xiis:内容.类型}content.type内容类型
{xiis:内容.作者ID}content.author_id作者 ID
{xiis:内容.状态}content.status内容状态
{xiis:内容.是否静态}content.is_static是否静态页面
{xiis:内容.是否推荐}content.recommended是否推荐
{xiis:内容.是否置顶}content.sticky是否置顶
{xiis:内容.是否精选}content.featured是否精选
{xiis:内容.创建时间}content.created_at创建时间(支持字段级格式)
{xiis:内容.更新时间}content.updated_at更新时间(支持字段级格式)
{xiis:内容.分类ID}content.catid分类 ID
{xiis:内容.创建者ID}content.created_by创建者 ID
{xiis:内容.更新者ID}content.updated_by更新者 ID
{xiis:内容.扩展1}content.ext1扩展字段 1
{xiis:内容.扩展2}content.ext2扩展字段 2
{xiis:内容.扩展3}content.ext3扩展字段 3
上一篇 / 下一篇
中文标签英文标签说明
{xiis:内容.上一篇标题}content.prev_title上一篇标题
{xiis:内容.上一篇智能链接}content.prev_smart_url上一篇智能链接
{xiis:内容.下一篇标题}content.next_title下一篇标题
{xiis:内容.下一篇智能链接}content.next_smart_url下一篇智能链接
{xiis:内容.上一篇链接}content.prev_url上一篇链接(基于ID)
{xiis:内容.上一篇别名链接}content.prev_slug_url上一篇别名链接(slug,空回退ID)
{xiis:内容.下一篇链接}content.next_url下一篇链接(基于ID)
{xiis:内容.下一篇别名链接}content.next_slug_url下一篇别名链接(slug,空回退ID)
SEO / 付费 / 类型专属(点击加入)
中文标签英文标签说明
{xiis:内容.SEO标题}内容.seo_titleSEO 标题
{xiis:内容.SEO关键词}内容.seo_keywordsSEO 关键词
{xiis:内容.SEO描述}内容.seo_descriptionSEO 描述
{xiis:内容.价格}内容.price商品价格(product)
{xiis:内容.原价}内容.original_price商品原价(product)
{xiis:内容.库存}内容.stock商品库存(product)
{xiis:内容.规格}内容.specs商品规格(product)
{xiis:内容.视频地址}内容.video_url视频地址(video)
{xiis:内容.视频时长}内容.video_duration视频时长(video)
{xiis:内容.下载地址}内容.download_url下载地址(app)
{xiis:内容.应用版本}内容.app_version应用版本(app)
{xiis:内容.应用大小}内容.app_size应用大小(app)
{xiis:内容.需付费}-是否需要付费(付费墙条件判断用)
{xiis:内容.价格显示}-价格显示文案(如 9.90 元 / 100 积分)
{xiis:内容.付费状态}-付费状态(未登录 / 已登录未购买 / 已购买)
{xiis:内容.是否已购买}-当前用户是否已购买(bool)
{xiis:内容.试读字数}-试读字数
{xiis:内容.字数}内容.word_count文章字数(article)
{xiis:内容.来源}内容.source内容来源(通用 meta)
{xiis:内容.付费配置}-付费配置(结构化数据)
{xiis:内容.用户已登录}-用户是否已登录(bool,配合条件判断)
{xiis:内容.VIP可免费}-VIP 是否可免费
{xiis:内容.价格金额}-价格金额原始字符串(供模板控制货币符号)
{xiis:内容.付费类型}-付费类型(0=积分 / 1=金额 / 2=VIP免费)
{xiis:内容.试读提示}-试读提示文案
{xiis:内容.未登录}-是否未登录(bool)
{xiis:内容.已登录未购买}-是否已登录未购买(bool)
{xiis:内容.已购买}-是否已购买(bool)
{xiis:内容.付费内容ID}-付费内容 ID(供购买按钮调用)
{xiis:内容.划线价}-划线原价(original_price > price 时非空)
{xiis:内容.折扣标签}-折扣标签文案(如「限时5折」)
通用 / 类型专属补全字段(点击加入)
中文标签英文标签说明
{xiis:内容.模板}内容.template内容模板(通用 meta)
{xiis:内容.允许评论}内容.allow_comment是否允许评论(通用 meta)
{xiis:内容.来源链接}内容.source_url来源链接(article)
{xiis:内容.sku}内容.skuSKU 编码(product)
{xiis:内容.重量}内容.weight商品重量(product)
{xiis:内容.单位}内容.unit计量单位(product)
{xiis:内容.视频封面}内容.video_cover视频封面(video)
{xiis:内容.视频类型}内容.video_type视频类型(video)
{xiis:内容.嵌入代码}内容.embed_code嵌入代码(video)
{xiis:内容.页面模板}内容.page_template页面模板(page)
{xiis:内容.跳转链接}内容.redirect_url跳转链接(page)
{xiis:内容.是否首页}内容.is_homepage是否首页(page)
{xiis:内容.应用平台}内容.app_platform应用平台(app)
{xiis:内容.更新日志}内容.changelog更新日志(app)

单页

单页(/about、/contact 等 slug 页面)点号标签:{xiis:单页.字段名}。

中文标签英文标签说明
{xiis:单页.名称}page.name单页名称
{xiis:单页.标题}page.title单页标题
{xiis:单页.副标题}page.subtitle副标题
{xiis:单页.内容}page.content单页正文内容
{xiis:单页.别名}page.slugURL 别名
{xiis:单页.模板}page.template模板文件名
{xiis:单页.浏览次数}page.view_count浏览次数
{xiis:单页.SEO标题}page.seo_titleSEO 标题
{xiis:单页.SEO关键词}page.seo_keywordsSEO 关键词
{xiis:单页.SEO描述}page.seo_descriptionSEO 描述
{xiis:单页.封面图}page.cover_image封面图 URL
{xiis:单页.缩略图}page.thumbnail缩略图 URL
{xiis:单页.链接}page.link_url外部链接地址
{xiis:单页.打开方式}page.target链接打开方式
{xiis:单页.重定向地址}page.redirect_url重定向目标 URL
{xiis:单页.发布时间}page.published_at发布时间
{xiis:单页.更新时间}page.updated_at更新时间
{xiis:单页.导航显示}page.is_nav是否在导航显示
{xiis:单页.是否静态}page.is_static是否启用静态化
{xiis:单页.是否系统}page.is_system是否系统内置
{xiis:单页.ID}page.id单页 ID(中文别名:{xiis:单页.编号})
{xiis:单页.站点ID}page.site_id站点 ID
{xiis:单页.父页面ID}page.parent_id父页面 ID
{xiis:单页.代码}page.code单页代码
{xiis:单页.类型}page.page_type页面类型(中文别名:{xiis:单页.页面类型})
{xiis:单页.重定向代码}page.redirect_code重定向 HTTP 状态码
{xiis:单页.排序}page.sort_order排序值(中文别名:{xiis:单页.排序值})
{xiis:单页.输出目录}page.output_dir静态化输出目录
{xiis:单页.状态}page.status状态(1=启用)
{xiis:单页.创建时间}page.created_at创建时间

标签页

标签详情页(/tag/{id} 或 /tag/{slug})点号标签与标签列表。

中文标签英文标签说明
{xiis:标签.名称}tag.name标签名称
{xiis:标签.别名}tag.slugURL 别名
{xiis:标签.描述}tag.description标签描述
{xiis:标签.使用次数}tag.use_count使用次数
{xiis:标签.智能链接}tag.smart_link智能链接
{xiis:标签.链接}tag.link标签链接(基于ID)
{xiis:标签.ID}tag.id标签 ID(中文别名:{xiis:标签.编号})
{xiis:标签.别名链接}tag.slug_link别名链接(/tag/{slug},slug 空回退 ID)
{xiis:标签.状态}tag.status标签状态
{xiis:标签列表}taglist

标签列表循环。参数:数量/排序/排列方式/状态/栏目ID/子栏目。字段:[标签:名称] [标签:智能链接] [标签:使用次数]

{xiis:内容标签列表}contenttaglist

当前内容的标签列表循环(内容详情页)

{xiis:标签信息}taginfo

标签信息块(标签详情页)

搜索页

搜索结果页(search.html)专用标签。

{xiis:搜索关键词}keyword

当前搜索关键词

{xiis:搜索总数}searchtotal

搜索结果总数

{xiis:当前页码}currentpage

当前页码

{xiis:总页数}totalpages

总页数

{xiis:每页数量}pagesize

每页显示数量

{xiis:搜索分页}searchpagination / pagination

搜索结果分页 HTML

{xiis:内容ID}contentid

当前内容 ID

{xiis:内容列表 启用分页="true"}list paging="true"

搜索结果内容列表。关键词自动从 URL 按站点配置的参数名(search_keyword_param,默认 q)读取并落到 title/excerpt 的 LIKE 过滤,无需显式传参。分类筛选:按钮用 [栏目:编号] 作 data-filter,卡片用 [内容:顶级分类ID] 作 data-type,两者必须同基准。

[内容:标题] [内容:智能链接] [内容:摘要] [内容:封面图片] [内容:发布时间] [内容:分类名称] [内容:顶级分类ID] [内容:顶级分类名称]
{xiis:栏目列表}(筛选按钮)category num="10"

搜索页分类筛选按钮组。默认只输出顶级栏目(父ID=0),用 [栏目:编号] 作 data-filter,与卡片 [内容:顶级分类ID] 对应。因分类筛选基于当前页结果,默认"全部"会显示全部命中结果。

错误页

404/500 等错误模板专用标签(not_found.html 等)。

{xiis:错误提示}errormsg

错误提示文案

{xiis:错误类型}errortype

错误类型标识

{xiis:状态码}statuscode / code

HTTP 状态码(如 404/500/503)

循环标签库(26 个)

全部循环标签。所有循环均支持自增字段:[内容:自增id]、[内容:索引0]、[内容:总数]。SQL标签 需先开启站点开关,详见「SQL标签」分类。

{xiis:内容列表}list / contentlist

内容列表(详见"栏目列表页"分类)

{xiis:栏目列表}category / categorylist

栏目列表

{xiis:标签列表}taglist

标签列表

{xiis:评论列表}commentlist

评论列表

{xiis:内容详情}contentdetail

内容详情块

{xiis:分类信息}categoryinfo

分类信息块

{xiis:标签信息}taginfo

标签信息块

{xiis:相关内容}related

相关内容推荐(内容详情页)

{xiis:页面内容列表}pagecontentlist

页面内容列表

{xiis:页面评论列表}pagecommentlist

页面评论列表

{xiis:页面标签列表}pagetaglist

页面标签列表

{xiis:页面分类列表}pagecategorylist

页面分类列表

{xiis:子分类列表}subcategory(嵌套)

子分类列表(嵌套标签)

{xiis:内容标签列表}contenttaglist

内容标签列表

{xiis:激活状态}active(块标签,向后兼容)

激活状态块(推荐改用 {xiis:页面激活?active: page=''} 行内三元)

{xiis:条件判断}if / 条件 / 如果

条件判断块

{xiis:导航列表}nav

导航列表

{xiis:导航子分类}navchildren

导航子分类

{xiis:友情链接}flink / friendlink

友情链接

{xiis:广告列表}ad / ads / adlist

广告列表

{xiis:单页列表}pagelist / pages

单页列表。参数:导航显示/页面类型/父页面ID/是否静态/是否系统/站点ID

{xiis:热门搜索}hotsearch / hotkeyword / 热门搜索词

热门搜索词

{xiis:收费附件列表}paidattachments / paidattach / 付费附件列表

收费附件列表。字段:[附件:标题] [附件:文件大小显示] [附件:下载次数](单个附件累计下载数)等

{xiis:数据列表 字段=""}datalist / data / jsonlist / list / 文件列表 / files / filelist / fileslist

通用 JSON 数据列表,字段:[数据:值]

{xiis:单页详情}pagedetail / pageinfo

单页详情块(2026-07-01 由「页面详情」更名,旧标签已废弃)。字段:[单页:名称] [单页:标题] [单页:链接]

{xiis:sql}SQL / SQL查询 / 查询 / 数据查询

模板直写只读SQL(需开启站点开关 sql_tag_enabled)。字段:[sql:列名]。详见「SQL标签」分类

SQL标签

模板中直接书写只读 SQL(SELECT / WITH),结果按循环渲染,字段前缀 [sql:列名]。2026年10月08日 新增,参考 PbootCMS 语法并按 xiis 多站点架构强化安全模型。

默认关闭:需在后台「系统管理 → 站点配置」→ 分组选「其他」→ 将 sql_tag_enabled 改为 true(按站点隔离)。未开启时标签整体输出空字符串,页面其余内容正常渲染。配置有 5 分钟缓存,可到「缓存管理」清理「系统配置统一缓存」立即生效。
站点隔离自动完成:查询由服务端按当前站点自动追加 site_id 条件,模板中无需也不允许手写 site_id;写了其他站点 id 会被拒绝执行并记入日志。JOIN 的关联表同样自动隔离(条件注入到 ON 内,LEFT JOIN 语义不变)。想少写 SQL 可用「构建模式」→ 标签类型选 sql → 使用内置的可视化构建器(数据表 / 关联表 / 筛选 / 分组聚合 / 分组筛选 / 输出字段 / 去重 / 排序 / 条数,按 SQL 子句顺序配置)。
构建器无需登录:可视化构建器面向所有模板作者开放,表/字段清单来自项目自带的默认库结构文件 sql-tag-meta.json(仅含非敏感表,不含运行库真实结构差异)。可自行编辑该文件增删可选表或修正注释,改后在后台「缓存管理 → SQL标签」清理一次即可生效(否则最长 5 分钟自动过期)。站点未开启 sql_tag_enabled 时构建器不展示任何表结构。
{xiis:sql}SQL / SQL查询 / 查询 / 数据查询

模板直写只读SQL。参数:sql/语句/查询语句/query(必填)、num/数量(行数上限200)、timeformat/时间格式。字段:[sql:列名]、[sql:自增id]、[sql:索引0]、[sql:总数]、[sql:列名 Y-m-d]

[sql:id] [sql:title] [sql:自增id] [sql:总数] [sql:created_at Y-m-d]
{xiis:查询 语句="…"}中文标签名 + 中文参数

中英双语写法等价,标签名与参数名可自由混用

聚合统计COUNT / SUM / MAX

单行聚合:{xiis:sql sql="SELECT COUNT(*) AS cnt FROM …"} 配 [sql:cnt] 输出

多表关联JOIN / LEFT JOIN

多表关联查询,别名列直接用 [sql:别名] 输出

分组统计GROUP BY

按栏目分组统计内容数。不支持 WITH(CTE)——CTE 别名可伪装成其他表绕过站点隔离,故整体拒绝;请改用普通查询

条件判断嵌套if + num

内部可用 {xiis:if 条件="列名"} 判断当前行任意列;num 参数收窄渲染行数

自嵌套最多 3 层

SQL标签可自嵌套(最多 3 层),防模板自引用导致无限递归

安全校验(任一不通过即拒绝执行并记日志,模板输出空串)
校验项规则
站点开关sql_tag_enabled 必须为 true;站点ID为 0 时强制拒绝
只读白名单首关键字必须为 SELECT 或 WITH
多语句拦截禁止分号(防 SQL 堆叠注入),允许结尾单个分号
注释拦截禁止 --、/*、#(防注释绕过关键字检测)
禁用关键字INSERT/UPDATE/DELETE/DROP/CREATE/ALTER/TRUNCATE/GRANT/REVOKE/SET/CALL/EXEC 等;OUTFILE/DUMPFILE/LOAD_FILE/SLEEP/BENCHMARK 等危险函数;FOR UPDATE
敏感表黑名单users、user_meta、user_roles、permissions、system_configs、api_keys、sites、member_info、member_levels、points_log、订单/充值/授权码表、各类日志表、定时任务与消息表等
系统库拦截mysql、information_schema、performance_schema、sys、pg_catalog、pg_toast、sqlite_master 等
信息函数拦截@@version、@@datadir、DATABASE()、USER()、VERSION() 等
注意事项
项说明
表名用占位符模板中书写 {表前缀}contents,渲染时替换为 xiis.net.yaml 的「数据库.表前缀」配置值
结果上限结果集最多 200 行,超出按上限截断;num 参数仅可收窄
结果缓存固定 60 秒进程内缓存(键 = sqltag:站点ID:SQL原文),需立即生效可到「缓存管理」清理
不支持占位符模板不支持传参,SQL 中不能含 ? 占位符(将因缺少参数执行失败)
多站点隔离服务端自动注入:按当前站点自动追加 site_id 条件,无需手写;写了其他站点 id 会被拒绝执行并记日志
全局共享表不含 site_id 的表(如 {表前缀}content_types)不注入条件,数据本就全站点共享
不支持 CTE不支持 WITH(CTE):CTE 别名可伪装成其他表绕过站点隔离,故整体拒绝;子查询无法自动定位注入点,需显式写 site_id = 当前站点
输出转义字段值统一 HTML 转义,防存储型 XSS

字段标签

循环内字段标签 [前缀:字段名]、格式参数与三元条件。

常用前缀(点击复制语法)
前缀使用场景
内容内容列表、内容详情、相关内容标签内
栏目栏目列表标签内
标签标签列表、标签信息标签内
评论评论列表标签内
分类分类信息标签内
导航 / nav导航列表标签内
导航子分类 / navchildren导航子分类标签内
单页 / page单页列表标签内
页面分类页面分类列表标签内
内容标签内容标签列表标签内
友链友情链接标签内
广告广告列表标签内
热门搜索 / hotsearch热门搜索标签内
数据 / data数据列表标签内
sql / SQLSQL标签内(列名由 SQL 的 AS 别名决定)
[内容:标题 20]字段截取

字段级格式参数:标题截取 N 字符、时间格式([内容:发布时间 Y-m-d H:i:s])

[内容:is_sticky?置顶:]三元条件

三元条件:字段为真返回真值,为假返回假值(可省略)。示例:[页面分类:激活?active:]

文字属性组合1置顶 / 2推荐 / 3精选

属性过滤组合示例:置顶+精选内容。英文:attr="sticky,featured" by="view_count" order="desc"

随机排序by="random"

随机内容列表

时间格式timeformat

列表级时间格式。优先级:字段级格式 > 列表级格式 > 默认。预设:date/datetime/chinese/time/short/year-month/full/cn/cn-date

时间工具

时间、时间戳与随机字符串(系统生成,无数据库依赖)。

{xiis:时间}time / now / 当前时间

当前时间。参数:格式(Y-m-d/Y年m月d日/cn/date…)、偏移(+1天/-1小时/+2月)

版权年份footer ©

页脚版权:© {xiis:时间 格式="Y"}

{xiis:时间戳}timestamp / unixtime

Unix 时间戳。类型:秒(s)/毫秒(ms)/微秒(us)/纳秒(ns)。缓存破坏:style.css?v={xiis:时间戳 类型="毫秒"}

{xiis:随机字符串}random / rand

密码学安全随机字符串。参数:长度(1-128)、类型(数字/字母/字母数字/大写/小写/十六进制)

载入模板

复用公共部件(头部 CSS、导航、页脚等)。

{xiis:载入 头部css.html}include

载入模板。别名:导入/引入/include/zr/zairu

{xiis:载入 导航.html}导航复用

载入站点导航部件

{xiis:载入 页脚.html}页脚复用

载入站点页脚部件

完整示例(按页面功能)

常用页面类型的完整标签组合,点击"生成"填入组合区后一键复制。

首页内容列表
<!-- 首页最新内容(中文参数) -->
{xiis:内容列表 数量="10" 栏目="1" 标题字数="20" 摘要字数="50" 排序="降序" 排列方式="发布时间"}
<article>
  <h2><a href="[内容:智能链接]">[内容:标题]</a></h2>
  <p>[内容:摘要]</p>
  <p>作者:[内容:作者] | 浏览:[内容:点击量] | 评论:[内容:评论量]</p>
  <p>[内容:发布时间 Y年m月d日 H:i:s]</p>
</article>
{/xiis:内容列表}

<!-- 英文参数等价写法 -->
{xiis:list num="10" catid="1" titlelen="20" desclen="50" order="desc" by="created_at"}
<article>
  <h2><a href="[内容:smart_link]">[内容:title]</a></h2>
  <p>[内容:excerpt]</p>
</article>
{/xiis:list}
栏目列表页(含分页)
<!-- 栏目信息头 -->
<h1>{xiis:栏目.名称}</h1>
<p>{xiis:栏目.描述}</p>

<!-- 栏目内容列表 + 分页 -->
{xiis:内容列表 栏目="2" 数量="10" 启用分页="true"}
<article>
  <h2><a href="[内容:智能链接]">[内容:标题]</a></h2>
  <p>[内容:摘要]</p>
</article>
{/xiis:内容列表}

<div class="pagination">
  {xiis:栏目分页 页码数量="7" 信息文字="共{total}条 {page}/{pages}页"}
</div>
内容详情页
<article>
  <h1>{xiis:内容.标题}</h1>
  <div class="meta">
    <span>作者:{xiis:内容.作者名称}</span>
    <span>分类:{xiis:内容.分类名称}</span>
    <span>浏览:{xiis:内容.浏览次数}</span>
    <span>时间:{xiis:内容.发布时间 Y-m-d}</span>
  </div>
  <div class="content">{xiis:内容.内容}</div>
  <div class="tags">{xiis:内容.标签列表智能链接}</div>
  <div class="nav">
    <a href="{xiis:内容.上一篇智能链接}">上一篇:{xiis:内容.上一篇标题}</a>
    <a href="{xiis:内容.下一篇智能链接}">下一篇:{xiis:内容.下一篇标题}</a>
  </div>
</article>
单页模板骨架
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>{xiis:单页.名称} — {xiis:网站标题}</title>
  <meta name="keywords" content="{xiis:单页.SEO关键词}">
  <meta name="description" content="{xiis:单页.SEO描述}">
</head>
<body>
  {xiis:载入 头部css.html}
  {xiis:载入 导航.html}

  <article>
    <h1>{xiis:单页.标题}</h1>
    <p>{xiis:单页.副标题}</p>
    <div>{xiis:单页.内容}</div>
  </article>

  {xiis:载入 页脚.html}
</body>
</html>
标签详情页
<header class="tag-header">
  <h1>标签:{xiis:标签.名称}</h1>
  <p>{xiis:标签.描述}</p>
  <span>共 {xiis:标签.使用次数} 次使用</span>
</header>

<!-- 带标签过滤的内容列表 -->
{xiis:内容列表 数量="10" 启用分页="true"}
<article>
  <h2><a href="[内容:智能链接]">[内容:标题]</a></h2>
  <p>[内容:摘要]</p>
  <div class="tags">[内容:标签列表智能链接]</div>
</article>
{/xiis:内容列表}

<div class="pagination">{xiis:栏目分页 页码数量="7"}</div>
搜索结果页
<h1>搜索:{xiis:搜索关键词}</h1>
<p>找到 {xiis:搜索总数} 条结果,当前第 {xiis:当前页码} / {xiis:总页数} 页</p>

{xiis:内容列表 启用分页="true" 数量="10"}
<article>
  <h2><a href="[内容:智能链接]">[内容:标题]</a></h2>
  <p>[内容:摘要]</p>
</article>
{/xiis:内容列表}

<div class="pagination">{xiis:搜索分页}</div>
导航菜单(含高亮与子菜单)
<nav>
  <ul>
    <li class="{xiis:页面激活?active: page='home'}"><a href="/">首页</a></li>
    {xiis:导航列表 父ID="0"}
    <li class="{xiis:页面激活?active: page='[导航:别名]'}">
      <a href="[导航:智能链接]">[导航:名称]{xiis:如果 条件='是否有子分类'} <svg>▾</svg>{/xiis:如果}</a>
      {xiis:导航子分类}
      <ul class="submenu">
        <li><a href="[导航子分类:智能链接]">[导航子分类:名称]</a></li>
      </ul>
      {/xiis:导航子分类}
    </li>
    {/xiis:导航列表}
  </ul>
</nav>
分类页完整组合
<!-- 面包屑导航 -->
<nav class="breadcrumb">
  <a href="{xiis:网站地址}">首页</a> >
  <a href="{xiis:页面分类顶层链接}">{xiis:页面分类顶层名称}</a> >
  <span>{xiis:栏目.名称}</span>
</nav>

<!-- 分类信息头 -->
<header class="category-header">
  <h1>{xiis:栏目.名称}</h1>
  <p>{xiis:栏目.描述}</p>
  <span>共 {xiis:栏目.内容数量} 篇内容</span>
</header>

<!-- 子分类筛选 -->
<div class="category-filter">
  <a href="{xiis:页面分类归属链接}" class="{xiis:页面分类归属激活?active:}">全部</a>
  {xiis:页面分类列表 含自身="false"}
  <a href="[页面分类:链接]" class="[页面分类:激活?active:]">[页面分类:名称]</a>
  {/xiis:页面分类列表}
</div>

<!-- 内容列表 + 分页 -->
{xiis:内容列表 数量="10" 启用分页="true"}
<article>
  <h2><a href="[内容:智能链接]">[内容:标题]</a></h2>
  <p>[内容:摘要]</p>
</article>
{/xiis:内容列表}
{xiis:栏目分页 页码数量="7"}
推荐内容 / 侧栏
<!-- 推荐内容 -->
{xiis:内容列表 数量="5" 文字属性="2" 排列方式="发布时间" 排序="降序"}
<li><a href="[内容:智能链接]">[内容:标题]</a></li>
{/xiis:内容列表}

<!-- 置顶+精选 -->
{xiis:内容列表 数量="10" 文字属性="1,3" 排列方式="点击量" 排序="降序"}
<article>
  <h2>[内容:标题]</h2>
  <p>浏览:[内容:点击量]</p>
</article>
{/xiis:内容列表}

<!-- 随机内容 -->
{xiis:内容列表 数量="5" 排列方式="随机"}
<li><a href="[内容:链接]">[内容:标题]</a></li>
{/xiis:内容列表}
SEO 完整设置
<!-- 栏目页 SEO -->
<title>{xiis:栏目.SEO标题} — {xiis:网站标题}</title>
<meta name="keywords" content="{xiis:栏目.SEO关键词}">
<meta name="description" content="{xiis:栏目.SEO描述}">
<meta property="og:image" content="{xiis:栏目.封面图}">

<!-- 单页 SEO -->
<title>{xiis:单页.SEO标题} — {xiis:网站标题}</title>
<meta name="keywords" content="{xiis:单页.SEO关键词}">
<meta name="description" content="{xiis:单页.SEO描述}">

<!-- 内容详情 SEO -->
<title>{xiis:内容.SEO标题} — {xiis:网站标题}</title>
<meta name="keywords" content="{xiis:内容.SEO关键词}">
<meta name="description" content="{xiis:内容.SEO描述}">
SQL标签(需先开启开关)
<!-- 前置:后台「站点配置 → 其他」将 sql_tag_enabled 改为 true -->

<!-- 最新文章 5 条(含时间格式与自增序号) -->
{xiis:sql sql="SELECT id, title, view_count, created_at FROM {表前缀}contents WHERE status=1 ORDER BY id DESC LIMIT 5" timeformat="Y-m-d"}
<li>
  <a href="/article/[sql:id]">[sql:自增id]. [sql:title]</a>
  <span>浏览 [sql:view_count]</span>
  <time>[sql:created_at]</time>
</li>
{/xiis:sql}

<!-- 聚合统计(单行) -->
{xiis:sql sql="SELECT COUNT(*) AS cnt, SUM(view_count) AS total FROM {表前缀}contents WHERE status=1"}
<p>共 [sql:cnt] 篇,总浏览 [sql:total]</p>
{/xiis:sql}

<!-- 多表关联 -->
{xiis:sql sql="SELECT c.id, c.title, cat.name AS category_name FROM {表前缀}contents c LEFT JOIN {表前缀}categories cat ON c.category_id=cat.id WHERE c.status=1 ORDER BY c.id DESC LIMIT 5"}
<li>[sql:category_name]:[sql:title]</li>
{/xiis:sql}

<!-- 分组统计(按栏目统计内容数) -->
{xiis:sql sql="SELECT cat.name, COUNT(*) AS cnt FROM {表前缀}contents c JOIN {表前缀}categories cat ON c.category_id=cat.id WHERE c.status=1 GROUP BY cat.name ORDER BY cnt DESC LIMIT 5"}
<li>[sql:name]:[sql:cnt]</li>
{/xiis:sql}

<!-- 与条件判断嵌套 -->
{xiis:sql sql="SELECT id, title, view_count FROM {表前缀}contents ORDER BY view_count DESC LIMIT 5"}
{xiis:if 条件="view_count"}
  <li>[sql:title]([sql:view_count])</li>
{/xiis:if}
{/xiis:sql}