整站模板包(仿站)
把一个站的栏目、内容、图片打包搬到另一个站:怎么导、怎么不重复、怎么撤销。
它解决什么问题
- 自己调好一套站,给客户批量开站 —— 客户拿到的是"已经填好内容的站",不是空壳;
- 换服务器时只搬内容与结构,账号、授权、订单留在原地;
- 做一个演示站当样板,客户看完说"就照这样来",一键拷过去。
入口:后台 外观 → 整站模板。导出与导入是两个权限点(sitepack.export /
sitepack.import),默认只给超级管理员。
包里有什么
manifest.json 清单:名称、版本、源站、包含项、各项计数
data/*.json 各表数据:栏目、内容、导航、轮播、链接、片段、表单、内容模型、站点设置
files/uploads/... 内容与轮播引用到的图片
theme/... 源主题自己的那部分模板文件(可选)
导出时可以勾选:连内容一起(不勾则只导结构)、带图片、带主题文件。
包里没有(也永远不会有)什么
- 用户与密码、会员数据
- 授权码、订单、应用商店数据
- SMTP / 支付宝 / 第三方登录等任何密钥
- 本站域名(那是每个站自己的身份)
换句话说:这个包可以放心交给别人。配置项走的是一份白名单, 名单外的一律不带;而且在白名单之上还有一道"看着像凭据的键名一律拦掉"的兜底。
导入的两种方式
| 方式 | 行为 |
|---|---|
| 追加(推荐) | 保留现有数据。同名栏目/片段/表单/模型会复用(不会变出两份); 同一栏目下的同名内容会跳过(重复导入不会翻倍) |
| 覆盖 | 先清空栏目、内容、导航、轮播、链接、片段、表单、内容模型,再导入。 导入前会自动给数据库留一份快照,但撤销也救不回被清掉的内容 |
拿不准就先点「先干跑」:只算不写,告诉你将新建多少、跳过多少、有哪些警告。
id 是怎么处理的
包里记的是源站的 id,导入时会全部重新映射:
源站栏目 id=3 → 新站建档后得到 id=11
源站内容 cid=3 → 导入后自动挂到 id=11 上
图集、副栏目、标签关系、内容关联 → 一并跟着改
所以两个站原有的数据不会撞车。内容的访问量不会带过来(那是每个站自己的数据), 作者会归到本次操作人名下(源站的那位作者在这边根本不存在)。
撤销
每次导入都会记下"这次新建了哪些行",在页面的「导入记录」页签里可以一键撤销:
按 id 精确删回去,站点设置还原成导入前的值,没人再引用的导入图片也一起收走。
覆盖模式无法撤销(旧数据已经被清空),它的数据库快照在 storage/backup/ 下,
真要回退就用那份快照。
安全边界
- 含
..之类越界路径的包,整包拒绝(解压前逐条校验) - 图片只允许落到
wwwroot/uploads/下 —— 包里写了别的路径,那一项会被跳过 - 主题只能落到
templates/<包标识>/(主题的唯一根目录), 不会覆盖官方主题,也不会自动启用 - 导入全程在一个事务里:中途失败整体回滚,不会留半套数据
导进来的内容默认是"已发布"状态(跟源站一致)。如果不想让它们立即可见,
导入后在「内容管理」里筛一批改状态即可。