Think Card · 轻量级内容与商城管理系统

一个基于 PHP + SQLite + 原生 HTML/CSS/JS 的轻量级内容管理系统, 集成文章、卡片、排行、文件仓库、商品商城、提货码核销、全站主题配色等模块。 无需数据库服务、无需构建工具,上传即用。

🐘 PHP 7.4+ 🗄️ SQLite 单文件 ⚡ 零依赖 · 零构建 🎨 主题配色系统 🛒 内容 + 商城一体 📱 全响应式

📖 项目简介

Think Card 是一套为个人站长、独立开发者、小型工作室打造的轻量级建站系统。 它同时兼顾了「内容发布」和「商品变现」两条主线:

整个系统没有使用任何后端框架、没有 Composer 依赖、没有前端打包流程, 只需要一台支持 PHP 的服务器即可运行。数据存储采用 SQLite 单文件数据库, 备份只需复制一个文件。

💡

适用场景:个人博客 / 提示词库 / 资源下载站 / 数字商品售卖 / 小规模会员制站点 / 独立开发者作品集。

✨ 功能特性

一、前台展示

模块说明
🏠 首页 index.html瀑布流布局展示全部内容(卡片/文章混排),支持分页、置顶、角标
🎠 顶部轮播两栏布局:左侧图片轮播(支持自动播放、触摸/鼠标滑动、圆点导航),右侧「冷门推荐」列表
🃏 Copy 卡片详情 copy.html封面 + 富文本内容介绍 + 提示词只读文本框,一键复制提示词
📥 下载详情 download.html支持「普通链接 / 下载链接 / 本地文件仓库」三种类型,展示下载说明与按钮
📝 文章 articles.html / article.php分类筛选、分页、置顶、角标;文章详情页富文本渲染并做 HTML 净化
🔗 链接汇总 downloads.html链接卡片 + Copy 卡片混排,支持按分类筛选
🏆 排行 ranking.html / rankingview.html排行条目可折叠展开,标题支持自定义颜色/粗细/字号
📚 全部内容 all.html卡片 + 文章混排的完整列表页
🛍️ 商城 shop.html / productpage.html商品网格(每行数量可配置)、多副图切换、库存、优惠价划线
💳 支付页 pay.html多收款二维码切换、下单后弹出提货码弹窗(一键复制地址 + 提货码)
📦 提货中心 pickup.html输入 16 位提货码自动核销:订单码直接出结果,活动码进入多选界面
🔍 搜索 search.html全站搜索(文章/排行/商品/卡片),关键词高亮,浮动搜索层交互
🧭 面包屑全站统一面包屑导航,栏目名自动从「栏目管理」读取
🎨 主题配色8 个 CSS 变量由后台配置,前端 theme.js 动态注入,无需重新编译

二、后台管理 admin.html

模块说明
📊 网站信息站点标题、版本号、文章数 / Copy 卡片数 / 链接卡片数统计
📦 内容管理四个子标签:Copy 卡片、链接卡片、文章管理、排行管理
📂 栏目管理导航栏栏目自定义(名称、地址、排序、是否新窗口打开)
📁 文件仓库文件分类 + 文件上传(白名单 + MIME 检测),可被「本地文件」类型的链接卡片直接引用
🛒 商品管理见下方「商城系统」
⚙️ 全站设置基本设置 / 首页设置 / 顶部轮播 / URL 伪静态 / 网站配色 / 底部设置
🔐 账号管理修改密码、修改用户名、多管理员管理(超级管理员可增删)

三、商城与提货系统

🗂️
商品分类
支持排序、编辑、删除(分类下的商品自动回落为「未分类」)。
🛍️
商品
主图 + 多张副图、原价 / 优惠价(自动划线)、库存(0 视为售罄,留空视为不限)、Quill 富文本商品介绍。
💳
收款二维码
可添加多个平台(微信 / 支付宝等),前台支付页自动生成切换按钮。
📋
订单管理
待处理订单 / 已完成订单分栏;支持「确认支付」「标记发货」,两者都完成后订单自动转为已完成。
📦
货物管理
为每个商品配置真实下载链接或提取说明,用户提货时展示。
🎁
提货码体系
订单提货码:用户下单时自动生成 16 位随机码,商家确认支付 + 发货后生效,一码一用
活动提货码:后台批量生成(1–1000 个),可指定可选商品集合、最大可提取数量、有效期;用户在提货页多选商品后核销。
🧹
提货码管理
未使用 / 已使用分栏、分页、批量复制、批量删除、一键清空、使用记录追溯(含使用时间与实际提取商品)。
📊
数据统计
销售总额、订单总数、商品种类;按商品 / 按日 / 按月 / 按年收入明细表。

四、安全机制

系统在多个层面做了防护,适合直接部署到公网:

🔒 账户与登录

🛡️ 请求与数据

📤 上传安全

🚦 限流与并发

五、伪静态(可选)

后台「全站设置 → URL 伪静态」一键开关,开启后链接变为:

article-{id}.html      →  article.php?id={id}
copy-{id}.html         →  copy.html?id={id}
download-{id}.html     →  download.html?id={id}
ranking-{id}.html      →  rankingview.html?id={id}
product-{id}.html      →  productpage.html?id={id}

需要服务器支持 URL 重写,配置见下方 🔧 伪静态配置

🧱 技术栈

层面技术
后端PHP(PDO + SQLite),无框架、无 Composer
数据库SQLite(单文件 data.sqlite,首次运行自动建表并写入默认数据)
前端原生 HTML5 / CSS3 / JavaScript(ES6+),无构建工具
富文本Quill 1.3.6(CDN 引入)
图标Emoji
样式CSS 变量驱动的主题系统,响应式适配手机 / 平板 / 桌面
🐘 PHP 7.4+
🗄️ SQLite 3
📄 原生 HTML5
🎨 原生 CSS3
原生 JavaScript
✏️ Quill 富文本

📁 目录结构

├── admin.html              # 后台管理入口
├── index.html              # 首页(瀑布流)
├── all.html                # 全部内容
├── articles.html           # 文章列表
├── article.php             # 文章详情(含 HTML 净化)
├── copy.html               # Copy 卡片详情
├── download.html           # 下载详情
├── downloads.html          # 链接汇总
├── ranking.html            # 排行列表
├── rankingview.html        # 排行详情
├── shop.html               # 商城列表
├── productpage.html        # 商品详情
├── pay.html                # 支付页
├── pickup.html             # 提货中心
├── search.html             # 搜索结果
├── edit_article.html       # 独立文章编辑器(后台新窗口打开)
├── edit_ranking.html       # 独立排行编辑器
├── api.php                 # 全部后端接口(GET 查询 + POST 操作)
│
├── css/
│   ├── style.css           # 前台主样式
│   ├── shop.css            # 商城相关样式
│   ├── admin.css           # 后台样式
│   ├── edit_article.css    # 文章编辑器样式
│   └── edit_ranking.css    # 排行编辑器样式
│
├── js/
│   ├── theme.js            # 主题配色注入(建议置于 head 中)
│   ├── main.js             # 首页逻辑
│   ├── all.js              # 全部内容逻辑
│   ├── articles.js         # 文章列表逻辑
│   ├── downloads.js        # 链接汇总逻辑
│   ├── ranking.js          # 排行列表逻辑
│   ├── rankingview.js      # 排行详情逻辑
│   ├── copy.js             # Copy 卡片详情逻辑
│   ├── download.js         # 下载详情逻辑
│   ├── search.js           # 搜索逻辑
│   ├── shop.js             # 商城列表逻辑
│   ├── productpage.js      # 商品详情逻辑
│   ├── pay.js              # 支付页逻辑
│   ├── pickup.js           # 提货中心逻辑
│   ├── breadcrumb.js       # 通用面包屑
│   ├── admin.js            # 后台主逻辑
│   ├── admin_shop.js       # 后台商城逻辑
│   ├── edit_article.js     # 文章编辑器逻辑
│   └── edit_ranking.js     # 排行编辑器逻辑├── data.sqlite             # SQLite 数据库(首次运行自动生成)
├── sessions/               # Session 文件目录(自动创建)
├── uploads/files/          # 文件仓库上传目录
├── imgs/YYYYMM/            # 通用图片上传目录
├── article/YYYYMM/img/     # 文章图片上传目录
└── products/YYYYMM/        # 商品图片上传目录

🚀 快速开始

1. 环境要求

2. 部署

# 1. 下载并解压


# 2. 将整个目录放到 Web 根目录,例如:
#    /var/www/html/thinkdiy
#    或虚拟主机站点根目录

# 3. 确保以下目录可写(PHP 运行用户)
chmod -R 755 .
chmod 775 sessions uploads imgs article products 2>/dev/null
⚠️

data.sqlitesessions/uploads/imgs/article/products/ 若不存在会在首次运行时自动创建;如果权限不足,请手动创建并赋予写权限。

3. 首次登录

浏览器访问:

http://你的域名/admin.html
项目
默认用户名admin
默认密码admin123
🔴

登录后系统会弹窗提醒修改密码。请立即前往「账号管理」修改为至少 8 位、包含字母与数字的强密码。

4. 完成基础配置

进入后台后建议按以下顺序配置:

  1. 全站设置 → 基本设置 网站标题、副标题、Logo、SEO 关键词与描述。
  2. 全站设置 → 首页设置 首页每页卡片数(建议 6–24)。
  3. 全站设置 → 网站配色 选择预设配色方案或自定义 8 个颜色变量。
  4. 全站设置 → 底部设置 开启自定义底部并填写 HTML。
  5. 栏目管理 添加导航栏目(如「首页 / 文章 / 资源 / 排行 / 商城 / 提货」)。
  6. 内容管理 按需添加 Copy 卡片、链接卡片、文章分类与文章、排行。
  7. 文件仓库 先建分类,再上传文件(供「本地文件」类型的链接卡片引用)。

🔧 伪静态配置

开启后台「全站设置 → URL 伪静态」后,需要配置服务器重写规则。

Nginx

location / {
    try_files $uri $uri/ /index.html;

    rewrite ^/article-([0-9A-Za-z_\-]+)\.html$  /article.php?id=$1 last;
    rewrite ^/copy-([0-9A-Za-z_\-]+)\.html$     /copy.html?id=$1 last;
    rewrite ^/download-([0-9A-Za-z_\-]+)\.html$ /download.html?id=$1 last;
    rewrite ^/ranking-([0-9A-Za-z_\-]+)\.html$  /rankingview.html?id=$1 last;
    rewrite ^/product-([0-9A-Za-z_\-]+)\.html$  /productpage.html?id=$1 last;
}

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;   # 按实际 PHP-FPM 地址修改
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Apache(.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^article-([0-9A-Za-z_\-]+)\.html$  article.php?id=$1  [L,QSA]
    RewriteRule ^copy-([0-9A-Za-z_\-]+)\.html$     copy.html?id=$1     [L,QSA]
    RewriteRule ^download-([0-9A-Za-z_\-]+)\.html$ download.html?id=$1 [L,QSA]
    RewriteRule ^ranking-([0-9A-Za-z_\-]+)\.html$  rankingview.html?id=$1 [L,QSA]
    RewriteRule ^product-([0-9A-Za-z_\-]+)\.html$  productpage.html?id=$1 [L,QSA]
</IfModule>
💡

注意:article.php 支持 PATH_INFOREQUEST_URI 双重兜底解析;其余详情页由前端 JS 从路径中提取 ID,因此只要重写规则把请求转发到对应 HTML 即可。

📘 使用说明

内容管理

🃏 Copy 卡片(内容管理 → Copy 卡片

🔗 链接卡片(内容管理 → 链接卡片

三种类型:

支持链接分类管理、角标、按钮、置顶。

📝 文章(内容管理 → 文章管理

🏆 排行(内容管理 → 排行管理

文件仓库

  1. 先添加分类 如「文档 / 图片 / 压缩包」。
  2. 上传文件 点击「上传文件」,选择分类与文件。
  3. 支持的文件类型(白名单) jpg/jpeg/png/gif/webp/bmp/icopdf/doc/docx/xls/xlsx/ppt/pptx/txt/md/csvzip/rar/7z/tar/gzmp3/wav/mp4/mov/avi/mkvttf/otf/woff/woff2
  4. 危险类型拒绝 phphtmljssvgexesh 等会被直接拒绝。
  5. 引用文件 上传后的文件可在「链接卡片 → 本地文件」中通过「📂 从文件库添加」引用。

商城与提货流程

用户浏览 shop.html
        ↓
进入 productpage.html(选规格/看图)
        ↓
点击「立即购买」→ pay.html(选择收款二维码并扫码支付)
        ↓
点击「我已支付」→ 系统生成订单 + 16 位提货码,弹窗提示保存
        ↓
商家在后台「订单管理」确认支付 → 「标记发货」
        (两步都完成后订单进入已完成)
        ↓
用户访问 pickup.html,输入提货码 → 校验通过 → 展示下载链接 / 说明

🎁 活动提货码(商品管理 → 生成提货码

全站设置项说明

设置项说明
网站标题 / 副标题显示在头部与浏览器标签栏
Logo 图片 URL头部 Logo,留空显示默认图标
SEO 关键词 / 描述写入 <meta name="keywords"><meta name="description">
首页每页卡片数首页瀑布流分页大小,建议 6–24
顶部图片轮播开关 + 轮播间隔 + 图片列表(每张可配跳转链接)
URL 伪静态开启后文章等详情页使用 xxx-{id}.html 形式
网站配色5 套预设 + 8 个自定义颜色变量,实时预览、一键恢复默认
底部设置开关 + 自定义 HTML(留空显示默认版权)

网站配色变量

变量对应 CSS 变量作用
页面背景色--color-bg全站页面背景
卡片背景色--color-surface卡片、面板背景
主文字颜色--color-text标题、正文
次要文字颜色--color-text-secondary辅助说明文字
边框颜色--color-border分割线、边框
主色--color-primary按钮、导航高亮、分页激活
主色悬停色--color-primary-hover按钮 hover 状态
强调色--color-accent价格、置顶角标

🎨 内置 5 套预设配色

简约灰(默认)
背景 #F5F5F5 / 主色 #1a1a1a / 强调 #e74c3c
清爽蓝
背景 #EEF4FF / 主色 #2563EB / 强调 #F97316
自然绿
背景 #EFF7F1 / 主色 #16A34A / 强调 #EAB308
优雅紫
背景 #F6F3FD / 主色 #7C3AED / 强调 #EC4899
暖阳橙
背景 #FFF7F0 / 主色 #EA580C / 强调 #DC2626

🔐 安全建议

  1. 立即修改默认密码与用户名 首次登录后务必前往「账号管理」修改为强密码。
  2. 启用 HTTPS 生产环境请使用 HTTPS(系统会自动为 Session Cookie 加上 Secure)。
  3. 保护敏感文件 建议将 data.sqlitesessions/ 通过服务器配置禁止直接访问。 例如 Nginx 中:
    location ~ \.(sqlite|db)$ { deny all; }
    location ^~ /sessions/ { deny all; }
  4. 反向代理真实 IP 如果部署在 Cloudflare / Nginx 反向代理之后,请按 api.phpgetClientIp() 的注释启用对应的真实 IP 获取逻辑 (默认只信任 REMOTE_ADDR,最安全但拿不到代理后的真实 IP)。
  5. 定期备份 定期备份 data.sqliteuploads/ 目录。
  6. 限制后台入口 建议为后台入口 admin.html 增加额外的访问限制(IP 白名单 / Basic Auth)。

❓ 常见问题

忘记后台密码怎么办?

删除 data.sqlite 会重置所有数据(不推荐)。更稳妥的方式是用 SQLite 工具修改 admins 表中对应用户的 password 字段为新的 password_hash() 值,或临时插入一个已知哈希的新管理员。

# 示例:用 PHP 生成新密码哈希
php -r "echo password_hash('YourNewPass123', PASSWORD_DEFAULT);"
上传文件提示「分类不存在」?

请先在「文件仓库」中创建至少一个文件分类。

提货码提示「商家尚未确认收款」/「尚未发货」?

订单提货码需要商家在后台完成「确认支付」+「标记发货」两步后才会生效。活动提货码则不受此限制,只需在有效期内且未被使用即可核销。

开启伪静态后页面 404?

请检查服务器重写规则是否生效,以及是否把请求正确转发到了对应的 HTML / PHP 文件。Nginx 需要 try_files + rewrite,Apache 需要开启 mod_rewrite 并允许 .htaccess 生效(AllowOverride All)。

首页不显示轮播?

需要在「全站设置 → 顶部图片轮播」中开启开关,并至少添加一张图片。轮播仅在首页第一页显示。

如何修改首页每页显示数量?

「全站设置 → 首页设置 → 首页每页卡片数」,建议 6–24。

数据库文件在哪里?如何备份?

项目根目录下的 data.sqlite,首次运行时自动创建。备份时直接复制该文件,同时建议一并备份 uploads/imgs/article/products/ 等上传目录。

如何修改网站配色?

后台「全站设置 → 网站配色」,可选择 5 套预设方案,也可以在预设基础上微调 8 个颜色变量。点击「💾 保存全部设置」后前台立即生效(前端 theme.js 会动态注入 CSS 变量)。

提货码的长度和字符集是什么?

16 位随机码,字符集为 ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789(去除了容易混淆的 0/O/1/I/l),用户输入时区分大小写,输入框会自动忽略空格和连字符。

商品库存如何设置?
  • 库存 = 0:商品视为售罄,前台显示「库存不足」按钮。
  • 库存留空:视为不限库存。
  • 库存 > 0:正常扣减,下单使用事务 + 条件更新保证并发安全。
如何自定义底部版权?

后台「全站设置 → 底部设置」,勾选「启用自定义底部」,在文本框中填写 HTML(支持任意 HTML 标签),留空则显示默认版权。

支持多管理员吗?

支持。超级管理员(role = admin)可以在「账号管理 → 管理员管理」中添加 / 删除管理员。普通管理员(role = user)只能管理内容,无法进入管理员管理面板。

📄 版权声明

本项目为专有软件,版权归作者所有,保留所有权利(All Rights Reserved)。 未经作者书面许可,任何人不得:

本软件按“现状”提供,不提供任何明示或暗示的担保,包括但不限于对适销性、特定用途适用性及非侵权性的担保。 在任何情况下,作者均不对因使用或无法使用本软件而产生的任何直接、间接、偶然、特殊或后果性损害承担责任。

⚠️

如需获得使用、商用或二次开发授权,请联系: your@email.com (请替换为你的真实联系方式)。

🙏 致谢

🎉

Think不止,DIY不息。