DotNetNuke:如何计算当前页面上窗格中的模块

时间:2011-06-20 09:16:01

标签: dotnetnuke

有没有办法从当前页面上下文中计算 中中的可见模块?

我在理论上知道我可以写一个连接的sql语句,但DotNetNuke提供了各种支持这种操作的对象。

这适用于DNN 4网站,但非常感谢DNN 5的任何提示。

如果窗格中有任何模块,即使是信息也会有所帮助。

2 个答案:

答案 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(), }; 是否与当前标签上的窗格匹配(通过PaneNameTabInfo.Panes),否则,将其计为{ {1}}。