C1 作为自定义私有文件的存储和编辑器

C1 as a store and editor for custom private files

前言

我们的站点使用 C1 作为 public 区域(信息、帮助、常见问题等)的 CMS。 我们的私有区域是作为一个独立的 ASP.NET 应用程序实现的,因此 CMS 和应用程序之间几乎没有任何联系。

应用程序中有约 ​​50 个电子邮件模板 (HTML+razor),几乎所有模板都已本地化(8 种语言)。

目前这些模板被存储为文件,并且在源代码管理之下。因此,任何编辑都由开发人员完成。

目标

我们希望将这些模板文件置于 Composite C1 的控制之下,从而使管理内容的人员可以编辑它们。

关键要求:

问题

有没有人有将此类私人内容置于 C1 控制之下的经验? 为了满足要求,是否会让我们将我们的电子邮件模板存储在 CMS 数据库中,而不是将它们存储为文件?

更新

在数据透视图中,可以创建适合存储电子邮件模板的自定义全局数据类型:只需要至少有一个 "Body" 类型的字段并分配 xhtml 编辑器给它。这样就可以将所有模板添加到数据库中,并且可以使它们 published/unpublished 并本地化。应用程序必须通过数据库访问模板,没关系。

唯一实际的问题是 xhtml 编辑器应该重新配置以允许非严格的 html with razor。有什么建议吗?

所以,这是我们得出的解决方案。

  1. 在数据透视图中创建自定义全局数据类型 EmailTemplate。

    勾选“设置”选项卡中的 "Has publishing" 复选框。

    最重要的字段是:

    • TemplateID - 电子邮件模板的字符串标识符
    • 正文 - 模板文本

    Body 字段应该彻底配置:

    • 字段类型:字符串
    • 字符串最大长度:无限长
    • 高级配置:小部件类型:VisualXhtml编辑器
  2. 为新创建的数据类型启用本地化(查看其上下文菜单)。

  3. 为新创建的数据类型编辑表单标记(查看其上下文菜单)。

    用以下代码替换 InlineXhtmlEditor 元素:

    <TextEditor Label="Template" Help="" MimeType="application/x-cshtml">
        <cms:bind source="Body" />
    </TextEditor>
    

    这样编辑器被配置为支持 html+razor 语法。

  4. 在内容透视图中显示数据类型(查看其上下文菜单)。

    这样电子邮件模板就会出现在内容树的网站项目中。


应用程序如何访问已发布的电子邮件模板

在 CMS 数据库中,将创建以下 tables:

    dbo.<datatype_name_with_namespace>_<culture_code>
    dbo.<datatype_name_with_namespace>_Unpublished_<culture_code>

例如

    dbo.Composite_EmailTemplate_en_GB
    dbo.Composite_EmailTemplate_Unpublished_en_GB
    dbo.Composite_EmailTemplate_de_DE
    dbo.Composite_EmailTemplate_Unpublished_de_DE
    ...

每个 table 都有对应于为数据类型配置的字段的列,例如模板 ID 和正文。

我相信现在已经很清楚如何在特定文化中找到特定模板了。