2011-01-03 3 views
1

Я работаю над модулем DNN, который создает страницы DNN (вкладки) и размещает на них модули DNN через код. Так что, это очень хорошо работает. Тем не менее, я бы хотел, чтобы он также мог программно устанавливать скин страницы и размещать модули в соответствующей области.Как установить скин страницы DotNetNuke через код?

Кто-нибудь знает, как это сделать с помощью кода?


Решение:


Я установил SkinSrc и ContainerSrc, как mika предложил.

Вот мой источник, если вам интересно. Здесь я установил SkinSrc.

''' <summary>Create new DNN tab/page.</summary> 
     Private Function CreatePage(ByVal ParentID As Integer, ByVal PageName As String, ByVal PageTitle As String, ByVal Description As String, ByVal Keywords As String, ByVal Permissions As TabPermissionCollection, Optional ByVal SkinSrc As String = "", Optional ByVal isVisible As Boolean = True, Optional ByVal LoadDefaultModules As Boolean = True) As Tabs.TabInfo 
      Try 
       Dim tabCtrlr As New TabController 
       Dim newTab As New Tabs.TabInfo 
       Dim newPermissions As TabPermissionCollection = newTab.TabPermissions 
       Dim permissionProvider As PermissionProvider = permissionProvider.Instance 
       Dim infPermission As TabPermissionInfo 

       ' set new page properties 
       newTab.PortalID = PortalId 
       newTab.TabName = PageName 
       newTab.Title = PageTitle 
       newTab.Description = Description 
       newTab.KeyWords = Keywords 
       newTab.IsDeleted = False 
       newTab.IsSuperTab = False 
       newTab.IsVisible = isVisible 
       newTab.DisableLink = False 
       newTab.IconFile = "" 
       newTab.Url = "" 
       newTab.ParentId = ParentID 

       'add skinsrc if specified 
       If (SkinSrc.Length > 0) Then newTab.SkinSrc = SkinSrc 

       ' create new page 
       tabCtrlr.AddTab(newTab, LoadDefaultModules) 

       ' copy permissions selected in Permissions collection 
       For index As Integer = 0 To (Permissions.Count - 1) 
        infPermission = New TabPermissionInfo 

        infPermission.AllowAccess = Permissions(index).AllowAccess 
        infPermission.RoleID = Permissions(index).RoleID 
        infPermission.RoleName = Permissions(index).RoleName 
        infPermission.TabID = Permissions(index).TabID 
        infPermission.PermissionID = Permissions(index).PermissionID 

        'save permission info 
        newPermissions.Add(infPermission, True) 
        permissionProvider.SaveTabPermissions(newTab) 
       Next index 

       'return TabInfo of new page 
       Return newTab 

      Catch ex As Exception 
       'failure 
       Return New Tabs.TabInfo 
      End Try 
     End Function 

Эти следующие две функции были взяты из источника DNN и слегка подправили, так что я не могу взять кредит на многие из них. Кроме того, если вы используете их в своих собственных модулях, могут возникнуть проблемы при обновлении DNN. Хотя обновление с 5,05 до 5,06 прошло гладко для меня.

В AddNewModule функции , я использовал ContainerSrc указать пользовательский контейнер для использования. PaneName это свойство используется для указания панели модуль должен быть помещен в.

#Region "From DNN Source --mostly" 

#Region "Enums" 

     Private Enum ViewPermissionType 
      View = 0 
      Edit = 1 
     End Enum 

#End Region 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary>Adds a New Module to a Pane</summary> 
     ''' <param name="align">The alignment for the Module</param> 
     ''' <param name="desktopModuleId">The Id of the DesktopModule</param> 
     ''' <param name="permissionType">The View Permission Type for the Module</param> 
     ''' <param name="title">The Title for the resulting module</param> 
     ''' <param name="paneName">The pane to add the module to</param> 
     ''' <param name="position">The relative position within the pane for the module</param> 
     ''' ----------------------------------------------------------------------------- 
     Private Function AddNewModule(ByVal TabID As Integer, ByVal title As String, ByVal desktopModuleId As Integer, ByVal paneName As String, ByVal position As Integer, ByVal permissionType As ViewPermissionType, ByVal align As String) As Integer 

      Dim objTabController As New TabController 
      Dim objTabPermissions As TabPermissionCollection = objTabController.GetTab(TabID, PortalId, True).TabPermissions 
      Dim objPermissionController As New PermissionController 
      Dim objModules As New ModuleController 
      Dim objModuleDefinition As ModuleDefinitionInfo 
      Dim objEventLog As New Services.Log.EventLog.EventLogController 
      Dim newModuleID As Integer 
      Dim j As Integer 

      Try 
       Dim desktopModule As DesktopModuleInfo = Nothing 
       If Not DesktopModuleController.GetDesktopModules(PortalSettings.PortalId).TryGetValue(desktopModuleId, desktopModule) Then 
        Throw New ArgumentException("desktopModuleId") 
       End If 
      Catch ex As Exception 
       LogException(ex) 
      End Try 

      Dim UserId As Integer = -1 
      If Request.IsAuthenticated Then 
       Dim objUserInfo As Users.UserInfo = UserController.GetCurrentUserInfo 
       UserId = objUserInfo.UserID 
      End If 

      For Each objModuleDefinition In ModuleDefinitionController.GetModuleDefinitionsByDesktopModuleID(desktopModuleId).Values 
       Dim objModule As New ModuleInfo 
       objModule.Initialize(PortalSettings.PortalId) 

       objModule.PortalID = PortalSettings.PortalId 
       objModule.TabID = TabID 
       objModule.ModuleOrder = position 
       If title = "" Then 
        objModule.ModuleTitle = objModuleDefinition.FriendlyName 
       Else 
        objModule.ModuleTitle = title 
       End If 
       objModule.PaneName = paneName 
       objModule.ModuleDefID = objModuleDefinition.ModuleDefID 
       If objModuleDefinition.DefaultCacheTime > 0 Then 
        objModule.CacheTime = objModuleDefinition.DefaultCacheTime 
        If Portals.PortalSettings.Current.DefaultModuleId > Null.NullInteger AndAlso Portals.PortalSettings.Current.DefaultTabId > Null.NullInteger Then 
         Dim defaultModule As ModuleInfo = objModules.GetModule(Portals.PortalSettings.Current.DefaultModuleId, Portals.PortalSettings.Current.DefaultTabId, True) 
         If Not defaultModule Is Nothing Then 
          objModule.CacheTime = defaultModule.CacheTime 
         End If 
        End If 
       End If 

       Select Case permissionType 
        Case ViewPermissionType.View 
         objModule.InheritViewPermissions = True 
        Case ViewPermissionType.Edit 
         objModule.InheritViewPermissions = False 
       End Select 

       ' get the default module view permissions 
       Dim arrSystemModuleViewPermissions As ArrayList = objPermissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", "VIEW") 

       ' get the permissions from the page 
       For Each objTabPermission As TabPermissionInfo In objTabPermissions 
        If objTabPermission.PermissionKey = "VIEW" AndAlso permissionType = ViewPermissionType.View Then 
         'Don't need to explicitly add View permisisons if "Same As Page" 
         Continue For 
        End If 

        ' get the system module permissions for the permissionkey 
        Dim arrSystemModulePermissions As ArrayList = objPermissionController.GetPermissionByCodeAndKey("SYSTEM_MODULE_DEFINITION", objTabPermission.PermissionKey) 
        ' loop through the system module permissions 
        For j = 0 To arrSystemModulePermissions.Count - 1 
         ' create the module permission 
         Dim objSystemModulePermission As PermissionInfo 
         objSystemModulePermission = CType(arrSystemModulePermissions(j), PermissionInfo) 
         If objSystemModulePermission.PermissionKey = "VIEW" AndAlso permissionType = ViewPermissionType.Edit AndAlso _ 
          objTabPermission.PermissionKey <> "EDIT" Then 
          'Only Page Editors get View permissions if "Page Editors Only" 
          Continue For 
         End If 

         Dim objModulePermission As ModulePermissionInfo = AddModulePermission(objModule, _ 
                       objSystemModulePermission, _ 
                       objTabPermission.RoleID, objTabPermission.UserID, _ 
                       objTabPermission.AllowAccess) 

         ' ensure that every EDIT permission which allows access also provides VIEW permission 
         If objModulePermission.PermissionKey = "EDIT" And objModulePermission.AllowAccess Then 
          Dim objModuleViewperm As ModulePermissionInfo = AddModulePermission(objModule, _ 
                       CType(arrSystemModuleViewPermissions(0), PermissionInfo), _ 
                       objModulePermission.RoleID, objModulePermission.UserID, _ 
                       True) 
         End If 
        Next 

        'Get the custom Module Permissions, Assume that roles with Edit Tab Permissions 
        'are automatically assigned to the Custom Module Permissions 
        If objTabPermission.PermissionKey = "EDIT" Then 
         Dim arrCustomModulePermissions As ArrayList = objPermissionController.GetPermissionsByModuleDefID(objModule.ModuleDefID) 

         ' loop through the custom module permissions 
         For j = 0 To arrCustomModulePermissions.Count - 1 
          ' create the module permission 
          Dim objCustomModulePermission As PermissionInfo 
          objCustomModulePermission = CType(arrCustomModulePermissions(j), PermissionInfo) 

          AddModulePermission(objModule, objCustomModulePermission, _ 
                    objTabPermission.RoleID, objTabPermission.UserID, _ 
                    objTabPermission.AllowAccess) 
         Next 
        End If 
       Next 

       objModule.AllTabs = False 
       objModule.Alignment = align 

       'apply Custom Container to module 
       objModule.ContainerSrc = CONTAINER_TRANSPARENT_PLAIN 

       newModuleID = objModules.AddModule(objModule) 
      Next 

      Return newModuleID 
     End Function 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary>Adds a Module Permission</summary> 
     ''' <param name="permission">The permission to add</param> 
     ''' <param name="roleId">The Id of the role to add the permission for.</param> 
     ''' ----------------------------------------------------------------------------- 
     Private Function AddModulePermission(ByVal objModule As ModuleInfo, ByVal permission As PermissionInfo, ByVal roleId As Integer, ByVal userId As Integer, ByVal allowAccess As Boolean) As ModulePermissionInfo 
      Dim objModulePermission As New ModulePermissionInfo 
      objModulePermission.ModuleID = objModule.ModuleID 
      objModulePermission.PermissionID = permission.PermissionID 
      objModulePermission.RoleID = roleId 
      objModulePermission.UserID = userId 
      objModulePermission.PermissionKey = permission.PermissionKey 
      objModulePermission.AllowAccess = allowAccess 

      ' add the permission to the collection 
      If Not objModule.ModulePermissions.Contains(objModulePermission) Then 
       objModule.ModulePermissions.Add(objModulePermission) 
      End If 

      Return objModulePermission 
     End Function 

#End Region 

ответ

4

кожи и контейнеров определяются SkinSrc и ContainerSrc значений. Они сохраняются в таблицах Tabs и TabModules, но вы также можете передать их в querystring для установки скина или контейнера для каждого запроса.

Стойкое значение SkinSrc на вкладку устанавливаются с TabController методов с использованием TabInfo объектов. Соответственно, используйте ModuleController и ModuleInfo для установки ContainerSrc. (ModuleController также используется для размещения модулей в панелях.)

QueryString параметров SkinSrc и ContainerSrc принимать значение пути кожи или контейнера без расширения файла, например:

&SkinSrc=/portals/_default/skins/_default/no%20skin 
&ContainerSrc=/portals/_default/containers/_default/no%20container 
+0

В DNN версии 5.4.4 I используя этот синтаксис для параметров строки запроса: & SkinSrc = [G] Skins/MySkinFolder/MySkinPage –

+0

В версии 7.3.3 выглядит как синтаксис вместо этого: & SkinSrc =/PortalRoot/Portals/_default/Skins/MySkinFolder/MySkinPage –

Смежные вопросы