# 酷冰甲 · 降温服企业官网

> 参考 [sqy58.com](http://sqy58.com) 风格，主打 **降温服 / 冷却服定制**，采用原生 PHP MVC 架构，内置 **前后台**，后台可设置 **任意网页风格**（颜色 / 字体 / 圆角 / 容器 / 导航样式 / 明暗模式 / 自定义 CSS）。

---

## 一、特性

- **原生 PHP MVC**，零依赖、零 Composer，PHP 7.4+ 即可运行。
- **双存储引擎**：文件模式（JSON，开箱即用）与 MySQL 模式（生产环境），通过一处配置切换。
- **完整前后台**：
  - 前台：首页 / 产品列表 / 产品详情 / 新闻列表 / 新闻详情 / 单页 / 联系我们（表单留资）。
  - 后台：仪表盘 / 产品 / 分类 / 新闻 / 横幅 / 单页 / 站点设置 / **主题风格编辑器**。
- **后台任意网页风格**：6 套预设主题（海洋蓝 / 森野绿 / 极光紫 / 日落橙 / 极简黑金 / 冰晶青）一键套用，并支持自定义主色、辅助色、字体、圆角、容器宽度、导航样式、默认明暗模式与自定义 CSS，保存即生成 `theme.css`。
- **安全与体验**：CSRF 防护、会话登录、明暗模式切换（localStorage 记忆）、玻璃拟态导航、磁吸按钮、滚动渐显动画、响应式布局。

---

## 二、环境要求

| 项目 | 要求 |
| --- | --- |
| PHP | ≥ 7.4（需 `pdo_mysql` 扩展用于 MySQL 模式；文件模式无需数据库） |
| Web 服务器 | 内置 `php -S` 可直接演示；生产建议 Nginx / Apache |
| 数据库（可选） | MySQL 5.7+ / MariaDB（仅 `mysql` 模式需要） |
| 扩展 | `curl`、`mbstring`、`json`、`session`（通常默认开启） |

---

## 三、快速开始（文件模式，开箱即用）

```bash
# 1. 进入项目
cd /path/to/project

# 2. 初始化数据（写入 storage/data/*.json 并生成主题样式）
php install/install.php

# 3. 启动内置演示服务器
php -S 127.0.0.1:8000 -t public
```

浏览器访问：

- 前台首页：<http://127.0.0.1:8000/>
- 后台登录：<http://127.0.0.1:8000/admin>

**默认后台账号**：

- 用户名：`admin`
- 密码：`admin888`

> 首次部署后请务必修改后台密码（见 `config/config.php` 的 `admin` 段，或在后台扩展账号体系）。

---

## 四、后台：设置任意网页风格

进入 **后台 → 主题风格**，即可：

1. **一键套用预设**：选择 6 套内置配色方案之一，点击「套用预设」即时预览。
2. **精细化自定义**：
   - 主色 / 主色深 / 辅助色 / 点缀色
   - 背景 / 表面 / 文字 / 次要文字 / 边框 / 导航背景
   - 字体、圆角（px）、容器宽度（px）
   - 导航样式：`center` 居中 / `left` 左对齐 / `transparent` 透明
   - 默认明暗模式：`light` / `dark`
   - 自定义 CSS（可注入任意样式覆盖）
3. **保存即生效**：点击「保存主题」后，系统重新生成 `public/assets/css/theme.css`，全站立即应用新风格，无需改代码、无需重启。

主题变量通过 CSS 变量注入前台（`--c-primary` 等），所有组件均基于这些变量构建，因此换肤是全局、即时、可逆的。

---

## 五、切换为 MySQL（生产环境）

1. 在 MySQL 中创建数据库并执行建表脚本：

   ```bash
   mysql -u root -p sqy_cooling < install/schema.sql
   ```

2. 修改 `config/config.php`：

   ```php
   'driver' => 'mysql',
   'db' => [
       'mysql' => [
           'host'     => '127.0.0.1',
           'port'     => 3306,
           'dbname'   => 'sqy_cooling',
           'user'     => 'your_user',
           'pass'     => 'your_password',
           'charset'  => 'utf8mb4',
       ],
       // ...
   ],
   ```

3. 执行安装脚本，将种子数据写入 MySQL：

   ```bash
   php install/install.php
   ```

数据访问层（`app/Core/Model.php`）会根据 `driver` 自动在 JSON 文件与 MySQL 表之间切换，业务代码无需改动。

---

## 六、目录结构

```
.
├── app/
│   ├── Core/                 # 框架核心：App(路由) / View / Controller / Model / Theme / Helper / Db
│   ├── Controllers/          # 前台控制器：Home / Product / News / Page / Contact
│   ├── Controllers/Admin/    # 后台控制器：Dashboard / Product / Category / News / Banner / Page / Setting / Auth
│   └── Models/               # 数据模型（Category / Product / News / Page / Banner / AdminUser / Setting）
├── config/
│   └── config.php            # 全局配置（driver / 后台路径 / 数据库 / 管理员）
├── install/
│   ├── install.php           # 安装/重置脚本（写种子数据 + 生成 theme.css）
│   ├── seed.php              # 种子数据
│   └── schema.sql            # MySQL 建表语句
├── public/                   # Web 根目录（入口 index.php）
│   ├── index.php
│   └── assets/
│       ├── css/  site.css / admin.css / theme.css(自动生成)
│       └── js/   main.js / admin.js
├── storage/
│   └── data/                 # 文件模式数据存储（*.json）
└── views/                    # 视图模板（layouts / 前台 / 后台）
```

---

## 七、生产环境部署

### Nginx 示例

```nginx
server {
    listen 80;
    server_name your-domain.com;
    root /path/to/project/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.(?!well-known).* { deny all; }
}
```

### Apache 示例（`.htaccess` 置于 `public/`）

```apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
```

> 部署要点：
> - Web 根目录必须指向 `public/`，避免暴露源码与 `storage/` 数据。
> - 确保 `storage/data/` 与 `public/assets/css/` 可写（用于文件模式与主题生成）。
> - 生产环境建议 `driver => 'mysql'`，并关闭 PHP 错误显示（`display_errors = Off`）。

---

## 八、数据备份与维护

- **文件模式**：直接备份 `storage/data/*.json` 即可。
- **MySQL 模式**：使用 `mysqldump` 定期备份数据库。
- **重置/重新初始化**：执行 `php install/install.php`（会覆盖现有数据，请先备份）。
- **重生成主题**：修改主题设置保存，或删除 `public/assets/css/theme.css` 后再次保存主题。

---

## 九、常见问题

**Q：后台登录后跳回登录页？**
A：确认 Cookie / Session 可写；文件模式无需数据库。检查 `php -S` 是否以 `public` 为根目录启动。

**Q：修改主题后页面没变化？**
A：清除浏览器缓存，确认 `public/assets/css/theme.css` 已更新；检查 `storage/data/settings.json` 中主题字段是否正确写入。

**Q：数据文件突然变成 0 字节？**
A：历史版本在写入含非法 UTF-8 字符时会触发 `json_encode` 失败并清空文件；当前版本已在 `Model::write()` 中修复（自动修正 UTF-8 且不会用失败结果覆盖文件）。如仍遇到，请检查输入是否为合法 UTF-8。

**Q：如何换域名 / 子目录部署？**
A：系统会自动根据 `DOCUMENT_ROOT` + `SCRIPT_FILENAME` 推导站点根路径，无需手动配置；若用反向代理请正确传递 `Host` 头。
