有没有办法从当前页面上下文中计算 中中的可见模块?
我在理论上知道我可以写一个连接的sql语句,但DotNetNuke提供了各种支持这种操作的对象。
这适用于DNN 4网站,但非常感谢DNN 5的任何提示。
如果窗格中有任何模块,即使是信息也会有所帮助。
答案 0 :(得分:4)
您可以使用ModuleController.GetTabModules()获取模块的选项卡
Imports DotNetNuke.Entities.Modules
...
Dim objModules As New ModuleController
Dim tabModules As Dictionary(Of Integer, ModuleInfo) = objModules.GetTabModules(TabId)
字典的键是ModuleID,值是ModuleInfo对象。您还可以调用相应的存储过程GetTabModules
来检索模块数据。
现在,ModuleInfo
有一个PaneName
属性,您可以使用该属性将结果分组到另一个字典,并从那里检索计数:
Dim result As New Dictionary(Of String, Integer)
For Each tabModule In tabModules.Values
If Not String.IsNullOrEmpty(tabModule.PaneName) Then
result(tabModule.PaneName) += 1
End If
Next
您可能还想过滤掉已删除的模块:
For Each tabModule In tabModules.Values _
.Where(Function(x) Not String.IsNullOrEmpty(x.PaneName)) _
.Where(Function(x) Not x.IsDeleted)
result(tabModule.PaneName) += 1
Next
可以使用存储过程GetTabPanes
检索选项卡的不同PaneNames列表。 4.9.5代码库中的相应方法在DataProvider中实现:
Dim dr As IDataReader = DotNetNuke.Data.DataProvider.Instance().GetTabPanes(TabId)
答案 1 :(得分:4)
如果您想要计算当前用户可以看到的模块的数量,您需要像mika建议一样调用ModuleController.GetTabModules
,并按PortalSecurity.HasNecessaryPermission
过滤(或{{ 1}}在DNN 5)
ModulePermissionController.HasModuleAccess
您可能需要做的另一件事是检查模块的var modules = from module in new ModuleController().GetTabModules(TabId).Values
where !module.IsDeleted
&& PortalSecurity.HasNecessaryPermission(SecurityAccessLevel.View, PortalSettings, module)
group module by module.PaneName into paneCounts
select new {
PaneName = paneCounts.Key,
Count = paneCounts.Count(),
};
是否与当前标签上的窗格匹配(通过PaneName
或TabInfo.Panes
),否则,将其计为{ {1}}。