DotNetNuke: как считать модули в панели на текущей странице - PullRequest
1 голос
/ 20 июня 2011

Есть ли способ считать видимых модулей в определенной панели на из текущего контекста страницы?

Я знаю, что теоретически я мог бы написать объединенное выражение sql, но DotNetNuke предлагает множество объектов, поддерживающих этот тип операции.

Это для сайта DNN 4, но любая подсказка также для DNN 5 приветствуется.

Даже информация, если на панели есть какой-либо модуль, может помочь.

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Если вы хотите подсчитать, какие модули может видеть текущий пользователь, вам нужно вызвать ModuleController.GetTabModules, как предлагает mika , и отфильтровать по PortalSecurity.HasNecessaryPermission (или ModulePermissionController.HasModuleAccess вDNN 5)

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 или DataProvider.GetTabPanes), в противном случае подсчитатьэто как "ContentPane".

4 голосов
/ 20 июня 2011

Вы можете получить модули на вкладке с помощью 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

Список отдельных имен PaneName для вкладки можно получить с помощью хранимой процедуры GetTabPanes.Соответствующий метод в кодовой базе 4.9.5 реализован в DataProvider:

Dim dr As IDataReader = DotNetNuke.Data.DataProvider.Instance().GetTabPanes(TabId) 
...