如何在多个 portals 之间保持 2sxc content types 同步?
新项目优先考虑 App Inheritance
如果这些 portals 位于同一个 DNN 安装中,需要复用同一个 2sxc app,可以优先考虑 Inherited Apps(App Inheritance):集中维护一个 Ancestor App,再在各 portal 中创建继承它的 Descendant App。
Ghost Content Types 仍然存在,当前文档称其为 App Shared Content-Types。官方文档将 Inherited Apps 列为解决这类问题的较新方案。官方说明
使用前,需要确认所用版本支持 App Inheritance,且相应授权和功能已启用。如果只需共享少数 content types,可以单独评估 App Shared Content-Types。
为什么适合用 App Inheritance
App Inheritance 可以集中复用 content types、queries、views 和共享目录中的模板文件。修改 Ancestor App 会影响继承它的各个 Descendant App,从而减少逐个 portal 更新的工作。
Descendant App 也会继承 Ancestor App 中的数据,可以添加本地内容,但不能直接修改继承的数据。如果各 portal 需要分别维护内容,Ancestor App 中就应只保留适合所有子站使用的数据。继承范围与限制
配置步骤
以下步骤采用当前文档中的 DNN 配置流程,旧版本的界面入口可能不同。
- 在
Manage Zone → Extensions / Features中搜索shared,确认授权包含所需功能,并启用SharedAppCode和SharedApps。 - 准备 Ancestor App,建议放在专门的非公开管理站点。在
App Settings → App → Configuration → Metadata中添加Is-Shared (Decorator) - for Apps。 - 将 app 文件夹复制到
/Portals/_default/2sxc/,保持文件夹名称一致。 - 将每个 view 的模板
Location改为App Files in Shared (Global) section。备份并移除旧的站点本地 app 文件夹后,检查模板和资源是否正常加载。 - 在目标 portal 的 Apps 管理界面中,展开
+菜单,选择Create inherited app,再选择 Ancestor App,创建 Descendant App。每个目标 portal 都需要执行一次。官方配置步骤
文件复制示例
第 3 步可以使用以下 Bash 命令。执行前,请将占位符替换为实际路径,完成备份,并确认目标目录没有同名 app:
# 创建共享 Apps 目录
mkdir -p "<web-root>/Portals/_default/2sxc"
# 将 app 文件夹复制到共享位置,保留原文件夹名
cp -R \
"<web-root>/Portals/<site-id>/2sxc/<app-folder>" \
"<web-root>/Portals/_default/2sxc/"
命令只负责复制文件,共享标记、模板位置和继承关系仍需在管理界面中配置。
如果只需要共享 content types
可以继续使用 App Shared Content-Types:
- 在一个管理用的 Master App 中维护类型定义。
- 在其他 apps 中创建引用这些定义的共享类型。
- 后续在 Master App 中统一修改定义。
当前文档说明,创建 Ghost 类型的隐藏按钮只有在 developer mode 下才会显示。按旧教程操作时找不到入口,并不代表该机制已经移除。
这类 app 导出时不会包含所引用的类型定义。因此,迁移到其他环境时,必须先部署持有定义的 Master App。App Shared Content-Types 文档
Global Shared Content-Types 通过文件提供整个安装中都可用的类型,适用范围更广。对于“同一个 app 安装在多个站点”的场景,官方文档仍建议优先考虑 App Shared Types,不宜仅凭名称就改用 Global Shared Content-Types。此外,使用 Global Shared Content-Types 时,字段重命名后,已有数据不会自动跟随改名。Global Content-Types 文档
上线前需要注意什么
- Ancestor App 的数据也会被继承,因此不要把某个生产 portal 的专属内容直接用作所有子站的公共基础。
- 共享模板应放在全局目录中。Ancestor App 的站点本地模板及 ADAM 文件不会随继承自动提供给其他站点。文件继承限制
- 如果各 portal 已经有独立的类型和数据,应先在测试环境规划迁移,核对字段映射、关联和已有内容。上述流程主要用于新建继承关系,不能据此假定已有 apps 会自动合并。
- 如果 portals 分属不同 DNN 安装,应按多个部署环境管理类型定义和 app 更新。这里的跨站继承流程不能直接用作跨安装实时同步方案。
备注:内容仅供参考。
