前端模板结构、标签语法、样式定制及主题开发规范
目录结构public/template/clientarea/{模板标识}/ ├── {模板标识}.php # 模板配置文件 ├── clientarea.html # 仪表盘/首页 ├── login.html # 登录页面 ├── register.html # 注册页面 ├── hostlist.html # 产品列表 ├── host.html # 产品详情 ├── orders.html # 订单列表 ├── order.html # 订单详情 ├── addfunds.html # 充值页面 ├── balanceLog.html # 余额日志 ├── profile.html # 个人资料 ├── realname.html # 实名认证 ├── verified.html # 实名认证检测 ├── ticketlist.html # 工单列表 ├── ticket.html # 工单详情 ├── submitaticket.html # 提交工单 ├── common/ # 公共组件 │ ├── header.html # 页面头部 │ ├── footer.html # 页面底部 │ ├── meta.html # Meta 标签 │ ├── script.html # 脚本引用 │ ├── sidenav.html # 侧边导航 │ └── captcha.html # 验证码组件 └── assets/ # 静态资源（可选） ├── css/ ├── js/ └── images/路由规范路由对应模板说明/clientareaclientarea.html仪表盘/loginlogin.html登录/registerregister.html注册/clientarea/hostlisthostlist.html产品列表/clientarea/host/{id}host.html产品详情/clientarea/ordersorders.html订单列表/clientarea/order/{id}order.html订单详情/clientarea/addfundsaddfunds.html充值/clientarea/balanceLogbalanceLog.html余额日志/clientarea/profileprofile.html个人资料/clientarea/realnamerealname.html实名认证/clientarea/verifiedverified.html实名认证检测/clientarea/ticketlistticketlist.html工单列表/clientarea/ticket/{id}ticket.html工单详情/clientarea/submitaticketsubmitaticket.html提交工单/clientarea/page/{name}{name}.html自定义页面配置文件<?php function {模板标识}_MetaData() { return [ "DisplayName" => "用户中心模板", "APIVersion" => "1.0.0", "HelpDoc" => "http://example.com" ]; } function {模板标识}_ConfigOptions() { return [ [ 'key' => 'site_title', 'title' => '网站标题', 'type' => 'input', 'default' => '', 'options' => [], 'tip' => '显示在浏览器标签页', ], [ 'key' => 'footer', 'title' => '页脚内容', 'type' => 'textarea', 'default' => '', 'options' => [], 'tip' => '支持HTML', ], [ 'key' => 'theme', 'title' => '主题风格', 'type' => 'select', 'default' => 'light', 'options' => [ 'light' => '浅色', 'dark' => '深色', ], 'tip' => '选择配色方案', ], ]; }配置访问：{$config.clientarea_meta.xxx}字段类型：input（单行）、textarea（多行）、select（下拉）全局变量变量说明$site.name站点名称$site.favicon站点图标$site.version站点版本$config系统配置$user.id用户ID$user.nickname昵称$user.email邮箱$user.mobile手机号$user.avatar头像URL$user.money余额$Request.tokenCSRF Token页面变量速查clientarea.html（仪表盘）变量说明$runningServices运行中服务数$accountBalance账户余额$pendingTickets待处理工单数$weekConsumption近7天消费$securityStatus安全状态$recentServices最近服务列表$recentOrders最近订单列表hostlist.html（产品列表）变量说明$hosts产品列表（分页）$p.id产品ID$p.domain主机名/域名$p.status状态$p.product.product_name产品名称$p.priceMatrix续费周期价格$page当前页码$lastPage总页数host.html（产品详情）变量说明$host.id产品ID$host.domain主机名$host.status状态$host.nextduedate到期时间$host.product.product_name产品名称$host.product.billing_type计费类型$moduleButtons模块操作按钮$priceMatrix续费价格orders.html（订单列表）变量说明$orders订单列表$order.ordernum订单号$order.amount金额$order.status状态$order.type类型$order.product.product_name产品名称$page当前页码$lastPage总页数order.html（订单详情）变量说明$order.id订单ID$order.ordernum订单号$order.amount金额$order.status状态$order.create_time创建时间$order.pay_time支付时间$order.payment支付方式$order.product.product_name产品名称$pay_channel支付渠道列表ticketlist.html（工单列表）变量说明$tickets工单列表$ticket.id工单ID$ticket.tid工单编号$ticket.title标题$ticket.user_side_status用户侧状态$ticket.priority优先级$ticket.category.name部门名称$page当前页码$lastPage总页数ticket.html（工单详情）变量说明$ticket.id工单ID$ticket.tid工单编号$ticket.title标题$ticket.content内容$ticket.user_side_status用户侧状态$ticket.priority优先级$replies回复列表$reply.content回复内容$reply.is_staff是否为客服回复$reply.create_time回复时间profile.html（个人资料）变量说明$user.id用户ID$user.nickname昵称$user.email邮箱$user.mobile手机号$user.avatar头像URL$user.money余额$user.group.name用户组名称$user.create_time注册时间$securityStatus安全状态$countries国家/地区列表realname.html（实名认证）变量说明$realNameStatus认证状态$idv.name真实姓名$idv.id_card_no证件号码（脱敏）$idv.reject_reason拒绝原因$used已使用认证次数$plugin.free_times_total免费认证次数$plugin.fee_after_free超出免费次数后的费用addfunds.html（充值）变量说明$user.money当前余额$paymentMethods可用支付方式$minAmount最小充值金额$maxAmount最大充值金额$rechargeBonuses充值赠送规则balanceLog.html（余额日志）变量说明$user.money当前余额$increase较上月增加金额$logs余额变动记录$log.type类型$log.amount变动金额$log.before变动前余额$log.after变动后余额$log.remark备注模板语法 {$variable} {$variable|default='默认值'} {if $condition} ... {elseif $other} ... {else} ... {/if} {switch name="$variable"} {case value="a"}...{/case} {default}...{/default} {/switch} {foreach $list as $item} {$item.name} {/foreach} {volist name="list" id="item" key="k"} {$k} - {$item.name} {/volist} {include file="clientarea/{模板标识}/common/header" /} {php} $var = 'value'; {/php} {$var|htmlspecialchars} {$time|date='Y-m-d'}页面结构普通页面{php} $title='页面标题'; {/php} {include file="clientarea/{模板标识}/common/header" /} {include file="clientarea/{模板标识}/common/footer" /}登录/注册页面（独立页面） {$site.name|default='系统'} - 登录 {:token()} 登录 注册页面特殊标记： 常用 API 接口订单相关接口方法参数说明/api/order/channelsGET-支付方式列表/api/order/createRechargeOrderPOSTamount, pay_id创建充值订单/api/order/createRenewOrderPOSThost_id, period_key创建续费订单/api/order/payPOSTordernum, payment订单支付/api/order/cancelPOSTordernum取消订单主机/产品相关接口方法参数说明/api/host/controlPOSThost_id, action主机控制（boot/reboot/shutdown）/api/host/notesPOSThost_id, notes保存主机备注用户相关接口方法参数说明/api/user/profilePOSTnickname, bio 等更新用户资料/api/user/changepwdPOSToldpassword, newpassword修改密码/api/user/avatarPOSTavatar更新头像/index/user/loginPOSTaccount, password, captcha用户登录/index/user/registerPOSTusername, email, password 等用户注册/index/user/logoutPOST-退出登录工单相关接口方法参数说明/index/clientarea/submitaticketPOSTtitle, department, priority, description 等提交工单/clientarea/replyticketPOSTticket_id, content回复工单/clientarea/closeticketPOSTticket_id关闭工单附件/上传接口方法参数说明/index/attachment/uploadPOSTfile (multipart/form-data)文件上传调试{php} print_r($user); var_dump($order); {/php}附录Bootstrap Icons 常用图标图标用途bi bi-speedometer2仪表盘bi bi-server服务器/产品bi bi-wallet2财务/余额bi bi-gear设置bi bi-headset工单/客服bi bi-person用户bi bi-cart-plus购买bi bi-check-circle成功/完成bi bi-inbox空状态颜色参考颜色类名用途主色primary / #0d6efd主要操作、链接成功success / #198754成功状态、运行中警告warning / #ffc107警告状态、待处理危险danger / #dc3545错误、已暂停信息info / #0dcaf0提示信息
目录结构public/template/cart/{模板标识}/ ├── {模板标识}.php # 模板配置文件（必需） ├── cart.html # 商品列表页（必需） ├── product.html # 商品详情页（必需） ├── header.html # 公共头部（可选） ├── footer.html # 公共底部（可选） ├── xxx.html # 自定义页面（可选） └── assets/ # 静态资源（可选） ├── css/ ├── js/ └── images/核心文件说明1. {模板标识}.php<?php function {模板标识}_MetaData() { return [ "DisplayName" => "模板显示名称", "APIVersion" => "1.0.0", "HelpDoc" => "http://example.com" ]; } function {模板标识}_ConfigOptions() { return [ // 单行文本 [ 'key' => 'nav_title', 'title' => '导航标题', 'type' => 'input', 'default' => '', 'options' => [], 'tip' => '显示在导航栏的标题', ], // 下拉选择 [ 'key' => 'theme_color', 'title' => '主题颜色', 'type' => 'select', 'default' => 'blue', 'options' => [ 'blue' => '蓝色主题', 'red' => '红色主题', 'dark' => '深色主题', ], 'tip' => '选择站点配色风格', ], ]; } function {模板标识}_CartArea() { return [ // 单行文本 [ 'key' => 'product_slogan', 'title' => '产品标语', 'type' => 'input', 'default' => '', 'options' => [], 'tip' => '显示在商品名称下方的简短标语', ], // 下拉选择 [ 'key' => 'recommend_level', 'title' => '推荐等级', 'type' => 'select', 'default' => 'normal', 'options' => [ 'normal' => '普通', 'hot' => '热销', 'new' => '新品', ], 'tip' => '商品标签展示级别', ], ]; }配置访问：{$config.cart.xxx} - ConfigOptions 配置{$meta.xxx} - CartArea 扩展字段字段类型：类型说明input单行文本textarea多行文本select下拉选择2. 页面文件cart.html - 商品列表页路由：/cart可用变量：变量类型说明$siteArray站点信息$configArray模板配置$userArray当前用户$productsObject商品分页数据$topListArray商品分类树$groupIdInt当前分类ID$keywordString搜索关键词$sortString排序方式商品数据结构：$p = [ 'id' => 1, 'product_name' => '商品名称', 'product_desc' => '商品描述', 'billing_type' => 'cycle', // free/oneoff/cycle 'price_matrix' => [ 'first_original' => 100.00, 'first_discount' => 80.00, 'first_cycle_txt'=> '月', ], ];排序参数：值说明weigh综合排序（默认）new最新上架price_asc价格从低到高price_desc价格从高到低product.html - 商品详情页路由：/cart/product/{id}可用变量：变量类型说明$productArray商品详细信息$priceArray价格配置信息$metaArray商品扩展字段值$metaListArray商品配置项列表价格结构：$price = [ 'type' => 'cycle', // free/oneoff/cycle 'oneoff_original' => 100.00, 'oneoff_discount' => '80.00', 'cycles' => [ '1M' => 10.00, '3M' => 27.00, '6M' => 50.00, '1Y' => 90.00, ], 'cycles_discount' => [ '1M' => '', '3M' => '25.00', '6M' => '', '1Y' => '80.00', ], ];配置项结构：$metaList = [ [ 'meta_key' => 'os', 'title' => '操作系统', 'value_type' => 'select', // select/switch/text/number 'required' => 1, 'option_list' => ['CentOS', 'Ubuntu', 'Windows'], 'meta_value' => '', 'prompt' => '请选择操作系统', ], ];创建订单 API：fetch('/api/order/createProductOrder', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ product_id: '商品ID', period_key: '周期标识（如：1M, 3M, oneoff, free）', meta: { 'os': 'CentOS', 'hostname': 'myserver' } }) }) .then(res => res.json()) .then(json => { if (json.code === 1) { location.href = json.data.jump_url; } else { console.log(json.msg); } });响应说明：code === 1：订单创建成功，data.jump_url 为跳转地址msg 包含 "手机认证"/"绑定手机"：需要绑定手机msg 包含 "实名认证"：需要实名认证4. 辅助文件header.html / footer.html引用：{include file='cart/{模板标识}/header' /}可用变量：$_h, $site, $config, $user, $topList自定义页面路由：/cart/page/{xxx} → xxx.html5. 开发规范文件命名必需：{模板标识}.php, cart.html, product.html小写字母，- 或 _ 分隔页面结构{php} $_h['title'] = '页面标题'; {/php} {include file='cart/{标识}/header' /} {include file="cart/{标识}/footer" /}资源引用路径：/template/cart/{标识}/assets/...CSS 放 header，JS 放 footer6. 模板语法 {$var} {if $condition}...{else}...{/if} {volist name="list" id="item"}...{/volist} {include file='cart/{标识}/header' /} {$var|htmlspecialchars|date='Y-m-d'}7. 调试{php}var_dump($product);{/php}
概述本文档定义了在 public/template/web/{模板名}/ 目录下开发首页及相关页面的规范。目录结构规范public/template/web/{模板标识名}/ ├── {模板标识名}.php # 模板配置文件（必须） ├── index.html # 首页模板（必须） ├── header.html # 页头组件（可选） ├── footer.html # 页脚组件（可选） ├── announcement.html # 公告列表页（必须 ├── announcement_detail.html # 公告详情页（必须） ├── xxx.html # 自定义页面（可选） ├── template.png # 模板预览图（建议 400x300） └── assets/ # 静态资源（可选，按需添加） ├── css/ ├── js/ ├── images/ └── fonts/注意：assets 目录不是必须的。如果使用外部 CDN 或系统自带资源，可以不创建。配置文件详解模板配置文件 {模板名}.php 必须包含以下三个函数：1. {模板名}_MetaData() - 模板元数据（必须）<?php function {模板名}_MetaData() { return [ "DisplayName" => "简洁首页", // 后台显示的名称 "APIVersion" => "1.0.0", // API版本号 "HelpDoc" => "http://www.sib.cc/" // 帮助文档链接（可选） ]; }2. {模板名}_ConfigOptions() - 首页配置字段（必须）定义首页模板后台可配置的字段，通过 $config.web_meta.xxx 访问。function {模板名}_ConfigOptions() { return [ // 单行文本 - 标题类 [ 'key' => 'hero_title', 'title' => '首页主标题', 'type' => 'input', 'default' => '', 'options' => [], 'tip' => '显示在首页Banner区域的主标题', ], // 单行文本 - 联系方式 [ 'key' => 'contact_email', 'title' => '联系邮箱', 'type' => 'input', 'default' => '', 'options' => [], 'tip' => '显示在联系我们页面的邮箱地址', ], // 多行文本 - 富文本内容 [ 'key' => 'welcome_content', 'title' => '欢迎语内容', 'type' => 'textarea', 'default' => '', 'options' => [], 'tip' => '支持HTML标签，显示在首页欢迎区域', ], // 多行文本 - 页脚代码 [ 'key' => 'footer_html', 'title' => '页脚自定义代码', 'type' => 'textarea', 'default' => '', 'options' => [], 'tip' => '支持HTML/JS代码，显示在页面底部', ], // 下拉选择 - 主题风格 [ 'key' => 'theme_style', 'title' => '主题风格', 'type' => 'select', 'default' => 'default', 'options' => [ 'default' => '默认风格', 'dark' => '深色模式', 'light' => '浅色模式', ], 'tip' => '选择站点整体配色方案', ], // 下拉选择 - 布局模式 [ 'key' => 'layout_mode', 'title' => '首页布局', 'type' => 'select', 'default' => 'standard', 'options' => [ 'standard' => '标准布局', 'full' => '全屏布局', 'compact' => '紧凑布局', ], 'tip' => '选择首页的整体布局风格', ], ]; }3. {模板名}_ArticleArea() - 文章配置字段（可选）定义文章详情页的自定义字段，通过 $config.article_meta.xxx 访问。function {模板名}_ArticleArea() { return [ [ 'key' => 'article_sidebar', 'title' => '文章侧边栏', 'type' => 'textarea', 'default' => ' 联系客服 ', 'tip' => '支持HTML', ], ]; }全局可用变量（所有页面共用）1. 站点信息 $site变量类型示例值$site['name']string"思博云"$site['title']string"思博云 - 云主机销售系统"$site['favicon']string"/favicon.ico"$site['description']string"专业云主机服务提供商"$site['keywords']string"云主机,VPS,服务器"2. 自定义配置配置来源访问方式说明ConfigOptions()$config.web_meta.xxx首页配置CartArea()$config.cart_meta.xxx购物车配置ArticleArea()$config.article_meta.xxx文章页配置3. 商品分类 $cates所有页面都可用的商品分类数组，用于展示分类导航。示例数据：$cates = [ [ 'id' => 1, 'name' => '云服务器', 'pid' => 0, // 0表示顶级分类 ], [ 'id' => 2, 'name' => '高防IP', 'pid' => 0, ], [ 'id' => 3, 'name' => '香港节点', 'pid' => 1, // 父分类ID为1（云服务器） ], [ 'id' => 4, 'name' => '美国节点', 'pid' => 1, ], ];页面详解1. index.html - 首页路由： /1.1 页面基础 SEO 变量变量名类型说明{$page_title}string页面标题，覆盖默认 $site.title{$page_keywords}stringSEO 关键词{$page_description}stringSEO 描述模板中定义：{php} $page_title = $site['title']; $page_keywords = $site['keywords']; $page_description = $site['description']; {/php}1.2 自定义配置变量从 $config 中读取的后台配置，后台「系统配置 → 自定义配置」中维护：配置来源访问方式说明ConfigOptions(){$config.web_meta.xxx}首页配置ArticleArea(){$config.article_meta.xxx}文章页配置1.3 动态内容数据公告列表（Announcements）变量名类型说明{$announcements}array首页展示的最新公告列表（通常取 3-6 条）数组元素结构：字段名类型说明{$a.id}int公告 ID{$a.title}string公告标题{$a.content}string公告内容（HTML 或纯文本）{$a.publish_time}string发布时间（格式：YYYY-MM-DD HH:ii:ss）{$a.views}int浏览次数{$a.category.name}string公告分类名称示例数据：$announcements = [ [ 'id' => 1, 'title' => '系统维护通知', 'content' => ' 将于今晚进行系统维护... ', 'publish_time' => '2025-01-15 10:00:00', 'views' => 128, 'category' => ['name' => '系统公告'], ], [ 'id' => 2, 'title' => '新年优惠活动', 'content' => ' 春节期间全场8折... ', 'publish_time' => '2025-01-10 09:00:00', 'views' => 256, 'category' => ['name' => '活动优惠'], ], ];模板中使用（PHP变量方式）：{foreach $announcements as $a} {$a.category.name} {$a.title} {:mb_substr(strip_tags($a['content']),0,40)}... {:date('Y-m-d', strtotime($a['publish_time']))} 浏览：{$a.views} 查看详情 {/foreach}或通过 JS API 获取： 1.4 全局辅助变量变量名类型说明{$user}object当前登录用户信息，未登录为 null{$user.username}string用户名{$user.email}string用户邮箱使用逻辑：{if $user} 访问控制台 欢迎，{$user.username} {else} 免费试用 立即登录 {/if}2. announcement.html - 公告列表页路由： /announcementURL 参数：?cate={id} - 按分类筛选?page={n} - 分页，默认第1页专属变量：变量类型示例数据$listarray文章列表数组$categoryarray公告分类列表$cateMaparray分类ID映射表$currentCateIdstring/int'all' 或 1$pageint1$lastPageint5示例数据：// $list - 文章列表 $list = [ [ 'id' => 1, 'title' => '系统维护通知', 'content' => ' 将于今晚进行系统维护... ', 'publish_time' => '2025-01-15 10:00:00', 'views' => 128, ], [ 'id' => 2, 'title' => '新年优惠活动', 'content' => ' 春节期间全场8折... ', 'publish_time' => '2025-01-10 09:00:00', 'views' => 256, ], ]; // $category - 公告分类 $category = [ ['id' => 1, 'name' => '系统公告', 'nickname' => '', 'description' => '', 'keywords' => ''], ['id' => 2, 'name' => '活动优惠', 'nickname' => '优惠活动', 'description' => '最新优惠活动', 'keywords' => '优惠,活动'], ]; // $cateMap - 分类映射 $cateMap = [ 1 => ['id' => 1, 'name' => '系统公告', ...], 2 => ['id' => 2, 'name' => '活动优惠', ...], ];3. announcement_detail.html - 公告详情页路由： /announcementdetail/{id}专属变量：变量类型示例数据$articlearray当前文章详情$cateNamestring'系统公告'$prevarray/null上一篇或null$nextarray/null下一篇或null示例数据：// $article - 当前文章 $article = [ 'id' => 1, 'title' => '系统维护通知', 'content' => ' 尊敬的用户： 将于今晚进行系统维护... ', 'publish_time' => '2025-01-15 10:00:00', 'views' => 128, 'tags' => '维护,通知,系统', ]; // $cateName - 分类名称 $cateName = '系统公告'; // $prev - 上一篇（可能为null） $prev = [ 'id' => 0, // 如果是第一篇，id可能为0 'title' => '无', ]; // 或 $prev = null; // 没有上一篇 // $next - 下一篇（可能为null） $next = [ 'id' => 2, 'title' => '新年优惠活动', ]; // 或 $next = null; // 没有下一篇4. 自定义页面 xxx.html路由规则： /page/{文件名}例如创建 about.html，访问地址为 /page/about可用变量：所有全局变量（$site, $config.web_meta, $cates）自定义页面无专属变量系统页面路由汇总路由对应文件说明/index.html首页/cart系统内置商品列表/购物车/cart?group={id}系统内置按分类筛选商品/announcementannouncement.html公告列表/announcement?cate={id}announcement.html按分类筛选公告/announcementdetail/{id}announcement_detail.html公告详情/page/{name}{name}.html自定义页面模板语法1. PHP 代码块{php} $page_title = $site['title']; {/php}2. 变量输出{$variable} {$variable|default='默认值'}3. 条件判断{if condition="$user"} 欢迎，{$user.username} {else /} 登录 {/if}4. 循环{foreach $announcements as $a} {$a.title} {/foreach}5. 包含文件{include file='web/{模板名}/header' /} {include file='web/{模板名}/footer' /}静态资源引用规范使用本地 assets（可选） 使用外部 CDN 开发 checklist[ ] 创建模板目录 public/template/web/{模板名}/[ ] 创建配置文件 {模板名}.php[ ] 实现 MetaData() 函数（必须）[ ] 实现 ConfigOptions() 函数（必须）[ ] 实现 CartArea() 函数（可选）[ ] 实现 ArticleArea() 函数（可选）[ ] 函数命名与目录名完全一致（区分大小写）[ ] 创建 index.html 首页模板[ ] 创建 announcement.html 公告列表页[ ] 创建 announcement_detail.html 公告详情页[ ] （可选）创建自定义页面如 about.html[ ] 添加 template.png 预览图（建议 400x300）[ ] 测试所有配置字段在后台正常显示[ ] 测试各页面前端正常渲染注意事项函数命名必须与目录名一致，包括大小写三个配置函数：MetaData() 和 ConfigOptions() 必须实现，CartArea() 可选ConfigOptions 中的 key 要唯一，建议使用前缀避免冲突assets 目录可选，不需要时可以不创建template.png 建议尺寸 400x300，用于后台预览路径使用绝对路径，以 /template/web/ 开头所有页面都可用 $cates 展示商品分类导航
$site 全局配置变量作用域：全站模板可用（首页模板、购物车模板、会员中心模板） 语法：{$site.字段名} 或 {$site['字段名']} 数据来源：后台「系统配置」各分组设定值站点基础信息变量名类型说明示例输出{$site.name}string站点名称思博业务系统{$site.domain}string站点根地址http://sib.cc{$site.favicon}string站点图标路径/uploads/xxx.png{$site.beian}stringICP备案号京ICP备xxx号{$site.cdnurl}stringCDN域名https://cdn.xxx.com{$site.timezone}string时区Asia/Shanghai{$site.version}int版本时间戳1769933723SEO 与页面元数据变量名类型数据来源说明{$site.title}string后台 → 系统配置 → Seo设置 → 标题站点默认标题，通常用于首页 标签{$site.keywords}string后台 → 系统配置 → Seo设置 → 关键词默认 SEO 关键词，多个关键词用英文逗号分隔{$site.description}string后台 → 系统配置 → Seo设置 → 描述默认站点描述，建议控制在 80-120 字符会员与认证配置变量名类型数据来源可选值说明{$site.user_register_captcha}string后台 → 系统配置 → 会员配置 → 注册验证方式email / mobile / none新用户注册时的验证方式{$site.global_idv}string后台 → 系统配置 → 会员配置 → 强制实名认证0 / 1是否全局强制要求实名认证{$site.global_phone}string后台 → 系统配置 → 会员配置 → 强制手机绑定0 / 1是否全局强制要求绑定手机号IDC 业务核心配置变量名类型单位数据来源业务含义{$site.renew_before}string天后台 → 常规配置 → 计划任务 → 计划任务设置到期前 X 天开始发送续费提醒通知{$site.pause_before}string天后台 → 常规配置 → 计划任务 → 计划任务设置到期后 X 天自动暂停服务（置为暂停状态）{$site.keep_days}string天后台 → 常规配置 → 计划任务 → 计划任务设置暂停后保留数据的宽限期，超期可删除{$site.purge_after}string天后台 → 常规配置 → 计划任务 → 计划任务设置产品删除后等待 X 天再从物理上清除数据$user 用户变量使用前提：仅在用户登录状态下有效，未登录时为 null。使用前必须先判断 {if $user}。基础信息变量名类型示例值说明{$user.id}int1用户ID{$user.username}string"admin"用户名（登录账号）{$user.nickname}string"帅哥1是"用户昵称{$user.email}string"king@sib.cc"邮箱地址{$user.mobile}string"17699122121"手机号{$user.avatar}string"http://.../avatar.jpg"头像URL账户状态变量名类型示例值说明{$user.status}string"normal"账户状态：normal=正常，disabled=禁用{$user.level}int0用户等级{$user.group_id}int1用户组ID{$user.agent_id}int1代理商ID财务信息变量名类型示例值说明{$user.money}string"574.01"账户余额{$user.score}int0积分个人资料变量名类型示例值说明{$user.gender}int1性别：0=未知，1=男，2=女{$user.birthday}string"2017-04-04"生日{$user.bio}string"7777s"个人简介登录记录变量名类型示例值说明{$user.logintime}int1769750628最后登录时间（时间戳）{$user.loginip}string"127.0.0.1"最后登录IP{$user.prevtime}int1769398867上次登录时间（时间戳）{$user.successions}int1连续登录天数{$user.maxsuccessions}int2最大连续登录天数注册信息变量名类型示例值说明{$user.jointime}int1491635035注册时间（时间戳）{$user.joinip}string"127.0.0.1"注册IP{$user.createtime}int0创建时间{$user.updatetime}int1769865594更新时间验证状态变量名类型示例值说明{$user.verification}string{"email":1,"mobile":0,"idv":1}验证状态JSON字符串注意事项$site 变量注意事项时区一致性：{$site.timezone} 影响所有时间格式化输出，确保与服务器时区配置一致CDN 路径拼接：使用 {$site.cdnurl} 拼接静态资源路径时，注意去除重复斜杠，建议写法：{$site.cdnurl}/static/xxx版本戳缓存：{$site.version} 用于强制刷新浏览器缓存，更新后自动变化，可用于 CSS/JS 文件后缀 ?v={$site.version}生命周期配置单位：所有 IDC 配置项（renew_before、pause_before 等）虽为字符串类型，但业务逻辑中按整数天数处理，确保填写纯数字$user 变量注意事项必须先判断是否存在：使用前必须用 {if $user} 判断，直接访问未登录用户变量会导致模板报错或空值异常时间字段为时间戳：logintime、jointime、prevtime 等时间字段为 Unix 时间戳（秒级），显示时需用 {:date('Y-m-d', $user.xxx)} 格式化money 为字符串类型：余额字段为字符串类型展示，进行数值计算时建议先转为 float 类型避免精度问题verification 需 JSON 解析：验证状态字段为 JSON 字符串，模板中可直接用对象语法访问（如 $user.verification.email），但需确保数据格式合法敏感字段已过滤：password、salt、token 等敏感字段已在控制器层过滤，不会传递到前端模板，即使强制访问也为空值状态值常量定义：status 字段除了 normal 和 disabled，还可能存在 pending（待审核）等自定义状态，判断时建议使用 {if $user.status != 'normal'} 而非仅判断 disabled