# 酷冰甲 · 降温服企业官网 git clone ssh://git@118.25.40.197:2222/Lucanlee/coolcoth.com.git > 参考 [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 ``` 浏览器访问: - 前台首页: - 后台登录: **默认后台账号**: - 用户名:`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` 头。