102 SiteMapNode、XmlSiteMap、Extensions、IAdminMenuPlugin
SiteMapNode类,通过该类及其属性成员,用于存储从1个指定静态文件(这里特指:"~/Areas/Admin/sitemap.config")中获取的数据,为管理区域左侧菜单组件的显示提供数据支撑(当前类中的定义来自:Telerik MVC,https://www.telerik.com/)。
Extensions类,该类中的方法成员,通过检索站点地图节点及其子节点实例中是否包含与指定的系统名称字符串相匹配,如果匹配,页面菜单栏中指定菜单项及其(如果系统名是)子菜单项组件以高亮状态进行显示;如果不匹配页面菜单栏中指定菜单项及其(如果系统名是)子菜单项组件以正常状态进行显示。
XmlSiteMap类,通过该类中方法成员,载入1个指定静态文件(这里特指:"~/Areas/Admin/sitemap.config")中的所有数据,从而初始化/实例化站点地图节点类的多个实例(当前类中的定义来自:Telerik MVC,https://www.telerik.com/)。
IAdminMenuPlugin接口,继承于IPlugin接口,继承于该接口的具体实现类,用于把第3方菜单插件载入到当前程序中,从而作为站点地图节点类的1个实例。
注意:
在nopCommerce程序中并没有为管理区域定义和载入相应的第3方菜单插件,nopCommerce开发者调用这此管理区域菜单插件只是为增加当前程序的可扩展性和功能的强大性,因此接口在当前程序中不具有任何意义,在实际上该接口的定义是可以被删除的。
1、重构\Nop.Web\Areas\Admin\Views\_ViewImports.cshtml页面,取消下列语句前的注释:
@using Nop.Web.Framework.Menu
2、重构\Nop.Web\Areas\Admin\Views\Shared\_AdminLayout.cshtml页面,取消下列语句前的注释:
@await Html.PartialAsync("Menu")
3、\Nop.Web\Areas\Admin\Views\Shared\Menu.cshtml页面:
//管理区域菜单插件,在nopCommerce程序中并没有定义和使用相应的管理区域菜单插件,nopCommerce开发者调用这此管理区域菜单插件只是为增加当前程序的可扩展性和功能的强大性,下面3行语句可以被注释掉或删除。
var adminMenuPlugins = await adminMenuPluginManager.LoadAllPluginsAsync(customer);
foreach (var adminMenuPlugin in adminMenuPlugins)
{
await adminMenuPlugin.ManageSiteMapAsync(rootNode);
}
//在nopCommerce程序中并没有定义和使用相应的管理区域菜单插件,那么菜单插件的子项更加的不会存在,所以下面4行语句也可以被注释掉或删除。
var pluginNode = rootNode.ChildNodes.FirstOrDefault(x => x.SystemName == "Third party plugins"); //第3方菜单插件
if (pluginNode?.Visible ?? false)
{
pluginNode.Visible = pluginNode.ChildNodes.Any(x => x.Visible)
&& await permissionService.AuthorizeAsync(StandardPermissionProvider.ManagePlugins, customer);
}
4、按F5执行程序,在数据库安装操作完成后,再次按F5执行程序,左侧菜单组件已经与后台页面进行了集成,且后台页面已经能够正常被执行。
对以上功能更为具体实现和注释22-03-09-032_Nop_4.40.4(管理区域左侧菜单组件的集成)。