返回首页

网站模板开发

模板控制 DCSHOP 前台的展示样式,包括商品列表、商品详情、下单页面、订单查询等。

模板文件结构

content/templates/
└── my_template/ # 模板目录
    ├── header.php # 公共头部(必须)
    ├── goods_list.php # 商品列表页(必须)
    ├── goods.php # 商品详情页(必须)
    ├── confirm.php # 订单确认页(必须)
    ├── order_query.php # 订单查询页(必须)
    ├── order_result.php # 订单结果页(必须)
    ├── page.php # 单页面模板
    ├── 404.php # 404页面
    ├── options.php # 模板配置定义
    ├── setting.php # 模板设置页面
    ├── preview.jpg # 模板预览图(建议 800x600)
    ├── css/ # 样式文件
    ├── js/ # 脚本文件
    └── img/ # 图片资源

必须文件说明

文件说明可用变量
header.php 公共头部,包含 HTML head、导航等 $site_name, $site_logo, $navs
goods_list.php 商品列表/首页 $goods_list, $sorts, $page_info
goods.php 商品详情页 $goods, $skus, $attach_fields
confirm.php 订单确认/支付页 $order, $payments
order_query.php 订单查询页 -
order_result.php 订单结果/卡密展示页 $order, $order_list, $deliver_content

常用模板变量

全局变量

// 站点信息
$site_name = Option::get('blogname');      // 站点名称
$site_url = DC_URL;                         // 站点URL
$site_logo = Option::get('site_logo');      // 站点Logo

// 导航菜单
$navs = $CACHE->readCache('navi');          // 导航数组

// 分类列表
$sorts = $CACHE->readCache('sort');         // 商品分类

// 当前用户
$is_login = ISLOGIN;                        // 是否登录
$user_id = UID;                             // 用户ID

商品列表变量 (goods_list.php)

// $goods_list 商品数组,每个元素包含:
[
    'id' => 1,                    // 商品ID
    'title' => '商品名称',         // 商品标题
    'cover' => '/uploads/xxx.jpg', // 封面图
    'price' => 1000,              // 价格(分)
    'stock' => 100,               // 库存
    'sales' => 50,                // 销量
    'sort_id' => 1,               // 分类ID
    'is_on_shelf' => 'y',         // 是否上架
]

// 分页信息
$page_info = [
    'total' => 100,               // 总数
    'page' => 1,                  // 当前页
    'limit' => 20,                // 每页数量
]

商品详情变量 (goods.php)

// $goods 商品详情
[
    'id' => 1,
    'title' => '商品名称',
    'cover' => '/uploads/xxx.jpg',
    'content' => '商品描述HTML',
    'price' => 1000,              // 原价(分)
    'stock' => 100,
    'sales' => 50,
    'is_sku' => 'y',              // 是否有规格
    'type' => 'goods_once',       // 商品类型
]

// $skus 规格列表(如果 is_sku='y')
[
    [
        'sku' => '1-2',           // 规格ID组合
        'sku_name' => '红色/大号',
        'stock' => 50,
        'guest_price' => 1000,    // 游客价(分)
        'user_price' => 900,      // 会员价(分)
    ],
    // ...
]

// $attach_fields 附加字段
[
    ['name' => '邮箱', 'required' => 'y'],
    ['name' => '备注', 'required' => 'n'],
]

模板配置 (options.php)

<?php
/**
 * 模板配置定义
 * 使用 TplOptions 类定义可配置项
 */

!defined('DC_ROOT') && exit('access denied!');

$options = TplOptions::getInstance();

// 定义配置项
$options->defineGroup('基础设置', [
    'site_title' => [
        'type' => 'text',
        'label' => '站点标题',
        'default' => 'DCSHOP 发卡系统',
        'description' => '显示在浏览器标签页的标题'
    ],
    'primary_color' => [
        'type' => 'color',
        'label' => '主题色',
        'default' => '#667eea',
    ],
    'show_sales' => [
        'type' => 'switch',
        'label' => '显示销量',
        'default' => 'y',
    ],
]);

$options->defineGroup('首页设置', [
    'banner_image' => [
        'type' => 'image',
        'label' => '首页横幅',
        'default' => '',
    ],
    'announcement' => [
        'type' => 'textarea',
        'label' => '公告内容',
        'default' => '',
    ],
]);

在模板中读取配置

// 方式1:使用 _g() 函数
$site_title = _g('site_title') ?: '默认标题';
$primary_color = _g('primary_color') ?: '#667eea';

// 方式2:使用 TplOptions
$options = TplOptions::getInstance();
$show_sales = $options->getOption('show_sales');

常用辅助函数

函数说明示例
Url::goods($id) 生成商品详情URL /goods/1.html
Url::sort($id) 生成分类URL /sort/1.html
formatMoney($fen) 格式化金额(分转元) 10.00
smartDate($timestamp) 智能日期格式化 3分钟前
subString($str, $len) 截取字符串 -

深色模式支持

模板必须支持深色模式,通过检测 html[data-theme="dark"] 属性:

<style>
/* 浅色模式 */
body { background: #f5f5f5; color: #333; }
.card { background: #fff; }

/* 深色模式 */
html[data-theme="dark"] body { background: #1a1a1a; color: #e0e0e0; }
html[data-theme="dark"] .card { background: #1e1e1e; }
</style>