098 AdminHeaderLinksModel、HeaderLinksModel、ICommonModelFactory、CommonModelFactory、AdminHeaderLinksViewComponent、HeaderLinksViewComponent
AdminHeaderLinksModel类,该类及其属性成员在程序执行时,为管理区域头部链接本地化组件在页面中的呈现操作,提供数据支撑和数据呈现。
HeaderLinksModel类,该类及其属性成员在程序执行时,为头部链接本地化组件在页面中的呈现操作,提供数据支撑和数据呈现。
ICommonModelFactory接口,继承于该接口的具体实现类,用来为一些自定义的常规组件,设定一些相关的默认数据,从而为这些自定义常规组件在页面上的呈现作好提供准备工作。
CommonModelFactory类,继承于ICommonModelFactory接口,该类用来为一些自定义的常规组件,设定一些相关的默认数据,从而为这些自定义常规组件在页面上的呈现作好提供准备工作。
AdminHeaderLinksViewComponent类,把管理区域头部链接本地化组件的默认本地化数据,与该组件进行绑定,即在页面展示时,(如果)显示该组件及其所默认本地化数据。
HeaderLinksViewComponent类,把头部链接本地化组件的默认本地化数据,与该组件进行绑定,即在页面展示时,(如果)显示该组件及其所默认本地化数据。
1、重构\Nop.Web\Views\_ViewImports.cshtml页面,定义下列语句:
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
@using Microsoft.Extensions.Primitives
@using Nop.Web.Models.Common
2、重构\Nop.Web\Views\_Layout.cshtml页面,定义下列语句:
@await Component.InvokeAsync("AdminHeaderLinks")
@await Html.PartialAsync("_Header")
3、重构Nop.Web.Infrastructure.DependencyRegistrar.Register方法,取消下列语句前的注释:
services.AddScoped<Factories.ICommonModelFactory, Factories.CommonModelFactory>();
4、重构[HttpPost] Nop.Web.Controllers.InstallController.Index方法,定义下列语句:
1>:
model.DisableSampleDataOption = _appSettings.InstallationConfig.DisableSampleData;
model.InstallRegionalResources = _appSettings.InstallationConfig.InstallRegionalResources;
PrepareAvailableDataProviders(model);
PrepareLanguageList(model);
PrepareCountryList(model);
2>:
//获取默认的文化信息(美式英语)实例与区域信息(美国)实例。
var cultureInfo = new CultureInfo(NopCommonDefaults.DefaultLanguageCulture);
var regionInfo = new RegionInfo(NopCommonDefaults.DefaultLanguageCulture);
var languagePackInfo = (DownloadUrl: string.Empty, Progress: 0);
if (model.InstallRegionalResources)
{
//通过客户端浏览器,获取本地化的文化信息(简体中文)实例与区域信息(中国(中国大陆))实例。
try
{
cultureInfo = new CultureInfo(model.Country[3..]);
regionInfo = new RegionInfo(model.Country[3..]);
}
catch { }
//如果本地化的文化信息(简体中文)实例的名称与默认的文化信息(美式英语)实例的名称不同,则执行下面的操作
if (cultureInfo.Name != NopCommonDefaults.DefaultLanguageCulture)
{
try
{
//从nopCommerce官方网站中下载,关于当前程序本地化(简体中文)数据信息的静态文件。
var client = EngineContext.Current.Resolve<NopHttpClient>();
var languageCode = _locService.GetCurrentLanguage().Code[0..2];
var resultString = await client.InstallationCompletedAsync(model.AdminEmail, languageCode, cultureInfo.Name);
var result = JsonConvert.DeserializeAnonymousType(resultString,
new { Message = string.Empty, LanguagePack = new { Culture = string.Empty, Progress = 0, DownloadLink = string.Empty } });
if (result.LanguagePack.Progress > NopCommonDefaults.LanguagePackMinTranslationProgressToInstall)
{
languagePackInfo.DownloadUrl = result.LanguagePack.DownloadLink;
languagePackInfo.Progress = result.LanguagePack.Progress;
}
}
catch { }
}
//把静态文件的压缩包下载到当前程序所部署的服务器端,并从该压缩包中解压出该静态文件,并持久化存储到当前程序所部署的服务器端中。
var uploadService = EngineContext.Current.Resolve<IUploadService>();
uploadService.UploadLocalePattern(cultureInfo);
}
//把当前网站程序必须支持的默认文化信息(美式英语)实例与区域信息(美国)实例和本地化的文化信息(简体中文)实例与区域信息(中国(中国大陆))实例的相关数据持久化存储到语言表中。
var installationService = EngineContext.Current.Resolve<IInstallationService>();
await installationService.InstallRequiredDataAsync(model.AdminEmail, model.AdminPassword, languagePackInfo, regionInfo, cultureInfo);
3>:
//把权限相关的默认数据持久化存储到权限纪录表和权限记录角色映射表中。
var permissionProviders = new List<Type> { typeof(StandardPermissionProvider) };
foreach (var providerType in permissionProviders)
{
var provider = (IPermissionProvider)Activator.CreateInstance(providerType);
await EngineContext.Current.Resolve<IPermissionService>().InstallPermissionsAsync(provider);
}
5、重构Nop.Web.Infrastructure.RouteProvider.RegisterRoutes方法,取消下列语句前的注释:
//用户注销路由映射。
endpointRouteBuilder.MapControllerRoute(name: "Logout",
pattern: $"{lang}/logout/",
defaults: new { controller = "Customer", action = "Logout" });
6、重构Nop.Services.Plugins.UploadService的构造方法为:
public UploadService(INopFileProvider fileProvider,
IStoreContext storeContext
/* IThemeProvider themeProvider*/)
{
_fileProvider = fileProvider;
_storeContext = storeContext;
//_themeProvider = themeProvider;
}
7、按F5执行程序,在数据库安装操作完成后,再次按F5执行程序,本地化登录/注销组件已经能够正常被执行。
对以上功能更为具体实现和注释22-02-22-028_Nop_4.40.4(管理区域头部、头部链接本地化组件和权限纪录数据的集成)。