C1 作为自定义私有文件的存储和编辑器
C1 as a store and editor for custom private files
前言
我们的站点使用 C1 作为 public 区域(信息、帮助、常见问题等)的 CMS。
我们的私有区域是作为一个独立的 ASP.NET 应用程序实现的,因此 CMS 和应用程序之间几乎没有任何联系。
应用程序中有约 50 个电子邮件模板 (HTML+razor),几乎所有模板都已本地化(8 种语言)。
目前这些模板被存储为文件,并且在源代码管理之下。因此,任何编辑都由开发人员完成。
目标
我们希望将这些模板文件置于 Composite C1 的控制之下,从而使管理内容的人员可以编辑它们。
关键要求:
- 互联网用户不能访问模板文件; CMS 必须只在管理控制台中显示它们并允许编辑它们。通过将文件放入例如App_Data,因此它们在系统视角下是可见的,但是在考虑安全性时这不是最佳方式,并且对满足以下要求没有帮助。
- 将 published/unpublished 功能应用于这些文件会很棒,就像内容透视图中的页面一样。
- 最好使用内置的 C1 本地化功能,这样一次只能看到那些使用当前所选语言的文件。
问题
有没有人有将此类私人内容置于 C1 控制之下的经验?
为了满足要求,是否会让我们将我们的电子邮件模板存储在 CMS 数据库中,而不是将它们存储为文件?
更新
在数据透视图中,可以创建适合存储电子邮件模板的自定义全局数据类型:只需要至少有一个 "Body" 类型的字段并分配 xhtml 编辑器给它。这样就可以将所有模板添加到数据库中,并且可以使它们 published/unpublished 并本地化。应用程序必须通过数据库访问模板,没关系。
唯一实际的问题是 xhtml 编辑器应该重新配置以允许非严格的 html with razor。有什么建议吗?
所以,这是我们得出的解决方案。
在数据透视图中创建自定义全局数据类型 EmailTemplate。
勾选“设置”选项卡中的 "Has publishing" 复选框。
最重要的字段是:
- TemplateID - 电子邮件模板的字符串标识符
- 正文 - 模板文本
Body 字段应该彻底配置:
- 字段类型:字符串
- 字符串最大长度:无限长
- 高级配置:小部件类型:VisualXhtml编辑器
为新创建的数据类型启用本地化(查看其上下文菜单)。
为新创建的数据类型编辑表单标记(查看其上下文菜单)。
用以下代码替换 InlineXhtmlEditor 元素:
<TextEditor Label="Template" Help="" MimeType="application/x-cshtml">
<cms:bind source="Body" />
</TextEditor>
这样编辑器被配置为支持 html+razor 语法。
在内容透视图中显示数据类型(查看其上下文菜单)。
这样电子邮件模板就会出现在内容树的网站项目中。
应用程序如何访问已发布的电子邮件模板
在 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 和正文。
我相信现在已经很清楚如何在特定文化中找到特定模板了。
前言
我们的站点使用 C1 作为 public 区域(信息、帮助、常见问题等)的 CMS。 我们的私有区域是作为一个独立的 ASP.NET 应用程序实现的,因此 CMS 和应用程序之间几乎没有任何联系。
应用程序中有约 50 个电子邮件模板 (HTML+razor),几乎所有模板都已本地化(8 种语言)。
目前这些模板被存储为文件,并且在源代码管理之下。因此,任何编辑都由开发人员完成。
目标
我们希望将这些模板文件置于 Composite C1 的控制之下,从而使管理内容的人员可以编辑它们。
关键要求:
- 互联网用户不能访问模板文件; CMS 必须只在管理控制台中显示它们并允许编辑它们。通过将文件放入例如App_Data,因此它们在系统视角下是可见的,但是在考虑安全性时这不是最佳方式,并且对满足以下要求没有帮助。
- 将 published/unpublished 功能应用于这些文件会很棒,就像内容透视图中的页面一样。
- 最好使用内置的 C1 本地化功能,这样一次只能看到那些使用当前所选语言的文件。
问题
有没有人有将此类私人内容置于 C1 控制之下的经验? 为了满足要求,是否会让我们将我们的电子邮件模板存储在 CMS 数据库中,而不是将它们存储为文件?
更新
在数据透视图中,可以创建适合存储电子邮件模板的自定义全局数据类型:只需要至少有一个 "Body" 类型的字段并分配 xhtml 编辑器给它。这样就可以将所有模板添加到数据库中,并且可以使它们 published/unpublished 并本地化。应用程序必须通过数据库访问模板,没关系。
唯一实际的问题是 xhtml 编辑器应该重新配置以允许非严格的 html with razor。有什么建议吗?
所以,这是我们得出的解决方案。
在数据透视图中创建自定义全局数据类型 EmailTemplate。
勾选“设置”选项卡中的 "Has publishing" 复选框。
最重要的字段是:
- TemplateID - 电子邮件模板的字符串标识符
- 正文 - 模板文本
Body 字段应该彻底配置:
- 字段类型:字符串
- 字符串最大长度:无限长
- 高级配置:小部件类型:VisualXhtml编辑器
为新创建的数据类型启用本地化(查看其上下文菜单)。
为新创建的数据类型编辑表单标记(查看其上下文菜单)。
用以下代码替换 InlineXhtmlEditor 元素:
<TextEditor Label="Template" Help="" MimeType="application/x-cshtml"> <cms:bind source="Body" /> </TextEditor>
这样编辑器被配置为支持 html+razor 语法。
在内容透视图中显示数据类型(查看其上下文菜单)。
这样电子邮件模板就会出现在内容树的网站项目中。
应用程序如何访问已发布的电子邮件模板
在 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 和正文。
我相信现在已经很清楚如何在特定文化中找到特定模板了。