CMS Kit 模块
本模块为您的应用程序提供CMS(内容管理系统)功能。它提供核心构建模块和完整可用的子系统,让您能够创建启用CMS功能的网站,或将这些构建模块用于任何网站用途。
您可以在 cms-kit-demo.abpdemo.com 查看实时演示。
此模块目前仅适用于MVC/Razor Pages界面。虽然没有官方的Blazor包,但它也可以在Blazor Server界面中使用,因为Blazor Server界面实际上是运行在ASP.NET Core MVC/Razor Pages应用程序中的混合应用。
当前可用的功能包括:
- 提供页面管理系统,用于管理具有动态URL的动态页面
- 提供博客系统,支持多博客创建和发布博客文章
- 提供标签系统,可为任何类型的资源(如博客文章)添加标签
- 提供评论系统,可为任何类型的资源(如博客文章或产品评价页面)添加评论功能
- 提供反应系统,可为任何类型的资源(如博客文章或评论)添加表情反应功能
- 提供评分系统,可为任何类型的资源添加评分功能
- 提供菜单系统,用于动态管理公共菜单
- 提供全局资源系统,用于动态添加全局样式和脚本
- 提供动态小部件系统,为页面和博客文章创建动态小部件
- 提供标记项系统,可将任何类型的资源(如博客文章或产品)标记为收藏、标星、标记或书签
您可以点击上方任意功能链接了解和学习如何使用
所有功能均可单独使用。如果您禁用某个功能,借助全局功能系统,它将完全从您的应用程序中消失,甚至包括数据库表。
前置要求
- 此模块依赖BlobStoring模块来存储媒体内容
请确保
BlobStoring模块已安装且至少正确配置了一个提供程序。更多信息请查看文档
- CMS Kit使用分布式缓存以获得更快的响应
在分布式/集群部署中,强烈建议使用分布式缓存(如Redis)以保证数据一致性
如何安装
ABP CLI允许使用add-module命令将模块安装到解决方案中。您可以在命令行终端中使用以下命令安装CMS Kit模块:
abp add-module Volo.CmsKit --skip-db-migrations
默认情况下,Cms-Kit被
GlobalFeature禁用。因此初始迁移将为空。如果您使用Entity Framework Core,安装时可以添加--skip-db-migrations跳过迁移。启用Cms-Kit全局功能后,请添加新的迁移。
安装过程完成后,在解决方案的Domain.Shared项目中打开GlobalFeatureConfigurator类,并将以下代码放入Configure方法中,以启用CMS Kit模块的所有功能:
GlobalFeatureManager.Instance.Modules.CmsKit(cmsKit =>
{
cmsKit.EnableAll();
});
您也可以选择逐个启用功能,而不是全部启用。以下示例仅启用标签和评论功能:
GlobalFeatureManager.Instance.Modules.CmsKit(cmsKit =>
{
cmsKit.Tags.Enable();
cmsKit.Comments.Enable();
});
如果您使用Entity Framework Core,请不要忘记添加新的迁移并更新数据库
包结构
此模块遵循模块开发最佳实践指南,由多个NuGet和NPM包组成。如果您想了解这些包及其之间的关系,请参阅该指南。
CMS kit包针对不同的使用场景设计。如果您查看CMS kit包,会发现一些包带有Admin和Public后缀。原因是该模块有两个应用层,考虑到它们可能用于不同类型的应用程序。这些应用层使用单一领域层:
Volo.CmsKit.Admin.*包包含管理(后台)应用程序所需的功能Volo.CmsKit.Public.*包包含在公共网站中使用的功能,用户可以在这些网站上阅读博客文章或发表评论Volo.CmsKit.*(无Admin/Public后缀)包称为统一包。统一包是分别添加Admin和Public包(相关层)的快捷方式。如果您有单一应用程序用于管理和公共网站,可以使用这些包
在统一应用程序中集成公共和管理包
如果您使用单一应用程序同时用于管理和公共网站,正确配置全局布局设置非常重要。默认情况下,布局设置为公共网站,适用于面向公众的页面。但是,当您的应用程序同时提供管理和公共页面时,应为所有CMS Kit页面显式设置全局布局。
为此,在您的Web项目中添加_ViewStart.cshtml文件到/Pages/Public/CmsKit/_ViewStart.cshtml路径,并按如下所示配置布局:
@using Volo.Abp.AspNetCore.Mvc.UI.Theming
@inject IThemeManager ThemeManager
@{
// 默认:GetPublicLayout()
Layout = ThemeManager.CurrentTheme.GetApplicationLayout();
}
_ViewStart.cshtml文件用于设置CmsKit文件夹中所有页面的布局
内部实现
表/集合前缀和架构
所有表/集合默认使用Cms前缀。如果需要更改表前缀或设置架构名称(如果您的数据库提供商支持),请在CmsKitDbProperties类上设置静态属性
连接字符串
此模块使用CmsKit作为连接字符串名称。如果未定义具有此名称的连接字符串,它将回退到Default连接字符串
有关详细信息,请参阅连接字符串文档
实体扩展
模块实体扩展系统是一个高级扩展系统,允许您为依赖模块的现有实体定义新属性。它在一个点上自动将属性添加到实体、数据库、HTTP API和用户界面
要扩展CMS Kit模块的实体,请在DomainShared项目中打开YourProjectNameModuleExtensionConfigurator类,并按如下所示更改ConfigureExtraProperties方法:
public static void ConfigureExtraProperties()
{
OneTimeRunner.Run(() =>
{
ObjectExtensionManager.Instance.Modules()
.ConfigureCmsKit(cmsKit =>
{
cmsKit.ConfigureBlog(plan => // 扩展Blog实体
{
plan.AddOrUpdateProperty<string>( //属性类型:string
"BlogDescription", //属性名称
property => {
//验证规则
property.Attributes.Add(new RequiredAttribute()); //向定义的属性添加必需属性
//...此属性的其他配置
}
);
});
cmsKit.ConfigureBlogPost(blogPost => // 扩展BlogPost实体
{
blogPost.AddOrUpdateProperty<string>( //属性类型:string
"BlogPostDescription", //属性名称
property => {
//验证规则
property.Attributes.Add(new RequiredAttribute()); //向定义的属性添加必需属性
property.Attributes.Add(
new StringLengthAttribute(MyConsts.MaximumDescriptionLength) {
MinimumLength = MyConsts.MinimumDescriptionLength
}
);
//...此属性的其他配置
}
);
});
});
});
}
ConfigureCmsKit(...)方法用于配置CMS Kit模块的实体cmsKit.ConfigureBlog(...)用于配置CMS Kit模块的Blog实体。您可以在Blog实体上添加或更新额外的属性cmsKit.ConfigureBlogPost(...)用于配置CMS Kit模块的BlogPost实体。您可以添加或更新BlogPost实体的额外属性您还可以为定义的属性设置一些验证规则。在上面的示例中,为名为**"BlogPostDescription"**的属性添加了
RequiredAttribute和StringLengthAttribute当您定义新属性时,它会自动添加到实体、HTTP API和UI中
- 一旦定义属性,它就会出现在相关实体的创建和更新表单中
- 新属性也会出现在相关页面的数据表中
抠丁客


