按页面功能分类 · 灵活组合 · 一键复制
没有匹配的标签,试试其他关键词。
该标签为无参数标签,直接复制即可使用。
全站通用的站点信息、SEO 与统计标签,任何页面可直接使用。
{xiis:网站标题}sitetitle网站标题
{xiis:网站关键词}sitekeywords网站关键词
{xiis:网站描述}sitedescription网站描述
{xiis:网站地址}siteurl网站地址
{xiis:网站标志}sitelogo网站 Logo 图片地址
{xiis:网站邮箱}siteemail网站联系邮箱
{xiis:网站电话}sitephone网站联系电话
{xiis:网站图标}sitefavicon / favicon网站 favicon 图标地址
{xiis:OG图片}ogimage / siteogimageOpen Graph 图片地址
{xiis:备案号}icp / siteicpICP 备案号
{xiis:公安备案}policeicp / sitepoliceicp公安备案号
{xiis:版权信息}copyright / sitecopyright版权信息
{xiis:联系地址}siteaddress / address联系地址
{xiis:统计代码}analytics / siteanalytics网站统计代码
{xiis:SEO标题}seotitle / siteseotitleSEO 专用标题
{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 取值(路由前缀、开关、尺寸等均可直接输出)。查找顺序为配置表 → 模板变量表 → 原样保留;未配置时输出空。常用取值示例:
{xiis:变量名}template_vars.var_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/关键词/状态/启用分页/标题字数/摘要字数/文字属性/时间格式/包含子栏目
{xiis:栏目列表}category / categorylist栏目列表循环。参数:数量/父ID/栏目ID(逗号分隔)。字段:[栏目:名称] [栏目:智能链接] [栏目:内容数量] [栏目:是否有子分类] [栏目:子分类列表]
{xiis:子分类列表}subcategory(嵌套)子分类嵌套循环,配合栏目列表实现多级菜单
{xiis:页面分类列表}pagecategorylist页面分类筛选循环。参数:分类id(catid) / 父ID(parentid) / 数量(num) / 子栏目(children) / 自动感知(autosense) / 含自身(include_self)。字段芯片可点击加入:
{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.slug | URL 别名 |
| {xiis:栏目.描述} | category.description | 栏目描述 |
| {xiis:栏目.图标} | category.icon | 栏目图标 |
| {xiis:栏目.SEO标题} | category.seo_title | SEO 标题 |
| {xiis:栏目.SEO关键词} | category.seo_keywords | SEO 关键词 |
| {xiis:栏目.SEO描述} | category.seo_description | SEO 描述 |
| {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.slug | URL 别名 |
| {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) |
| 中文标签 | 英文标签 | 说明 |
|---|---|---|
| {xiis:内容.SEO标题} | 内容.seo_title | SEO 标题 |
| {xiis:内容.SEO关键词} | 内容.seo_keywords | SEO 关键词 |
| {xiis:内容.SEO描述} | 内容.seo_description | SEO 描述 |
| {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} | 内容.sku | SKU 编码(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.slug | URL 别名 |
| {xiis:单页.模板} | page.template | 模板文件名 |
| {xiis:单页.浏览次数} | page.view_count | 浏览次数 |
| {xiis:单页.SEO标题} | page.seo_title | SEO 标题 |
| {xiis:单页.SEO关键词} | page.seo_keywords | SEO 关键词 |
| {xiis:单页.SEO描述} | page.seo_description | SEO 描述 |
| {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.slug | URL 别名 |
| {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,两者必须同基准。
{xiis:栏目列表}(筛选按钮)category num="10"搜索页分类筛选按钮组。默认只输出顶级栏目(父ID=0),用 [栏目:编号] 作 data-filter,与卡片 [内容:顶级分类ID] 对应。因分类筛选基于当前页结果,默认"全部"会显示全部命中结果。
404/500 等错误模板专用标签(not_found.html 等)。
{xiis:错误提示}errormsg错误提示文案
{xiis:错误类型}errortype错误类型标识
{xiis:状态码}statuscode / codeHTTP 状态码(如 404/500/503)
全部循环标签。所有循环均支持自增字段:[内容:自增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(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]
{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 / SQL | SQL标签内(列名由 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 / unixtimeUnix 时间戳。类型:秒(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 -->
<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_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}