项目

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模块已安装且至少正确配置了一个提供程序。更多信息请查看文档

在分布式/集群部署中,强烈建议使用分布式缓存(如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包,会发现一些包带有AdminPublic后缀。原因是该模块有两个应用层,考虑到它们可能用于不同类型的应用程序。这些应用层使用单一领域层:

  • 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"**的属性添加了RequiredAttributeStringLengthAttribute

  • 当您定义新属性时,它会自动添加到实体HTTP APIUI

    • 一旦定义属性,它就会出现在相关实体的创建和更新表单中
    • 新属性也会出现在相关页面的数据表中
在本文档中