2011-01-03 4 views
1

Ich arbeite an einem DNN-Modul, das DNN-Seiten (Tabs) erstellt und DNN-Module auf ihnen durch Code platziert. Also, weit, das funktioniert sehr gut. Ich möchte aber auch, dass es die Skin der Seite programmatisch festlegen und die Module in den entsprechenden Bereich platzieren kann.Wie wird die Skin einer DotNetNuke-Seite über Code festgelegt?

Weiß jemand, wie man das mit Code macht?


Lösung:


stelle ich SkinSrc und ContainerSrc als mika vorgeschlagen.

Hier ist meine Quelle, wenn Sie interessiert sind. Hier stelle ich SkinSrc ein.

''' <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 

Diese beiden nächsten Funktionen wurden aus der DNN Quelle entnommen und leicht gezwickt, so nehme ich nicht Kredit von ihnen für viel. Wenn Sie diese in Ihren eigenen Modulen verwenden, kann es beim Upgrade von DNN zu Problemen kommen. Obwohl das Upgrade von 5.05 auf 5.06 für mich reibungslos verlief.

Im AddNewModule Funktion, benutzte ich ContainerSrc den benutzerdefinierten Container angeben, zu verwenden. PaneName ist die Eigenschaft verwendet, um anzugeben, die das Panel Modul soll gesetzt werden.

#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 

Antwort

4

Haut und den Behälter durch SkinSrc bestimmt und ContainerSrc Werte. Diese werden in den Tabs- und TabModules-Tabellen beibehalten, Sie können sie aber auch in Querystring übergeben, um für jede Anforderung eine Skin oder einen Container festzulegen.

Persistent SkinSrc Wert für ein Register gesetzt mit TabController Methoden TABINFO Objekten. Verwenden Sie ModuleController und ModuleInfo, um ContainerSrc festzulegen. (ModuleController auch Platz Module in Scheiben verwendet wird.)

Querystring-Parameter SkinSrc und ContainerSrc ohne Dateierweiterung die Haut oder Containerpfad Wert annehmen, zum Beispiel:

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

In DNN Version 5.4.4 I verwende diese Syntax für Query-String-Parameter: & SkinSrc = [G] Skins/MySkinFolder/MySkinPage –

+0

In Version 7.3.3 sieht wie die Syntax ist stattdessen: & SkinSrc =/PortalRoot/Portale/_default/Skins/MySkinFolder/MySkinPage –

Verwandte Themen