title: How to set the skin of a DotNetNuke page through code?
body: <p>I'm working on a DNN module that creates DNN pages (tabs) and places DNN modules on them through code.  So, far that's working very well.  However, I'd like it to also be able to programmatically set the page's skin and place the modules in the appropriate pane.</p>
  
  <p>Does anyone know how to do this using code?</p>
  
  <hr>
  
  <p><strong>Solution:</strong></p>
  
  <p><br />
  I set <strong>SkinSrc</strong> and <strong>ContainerSrc</strong> as <a href="https://stackoverflow.com/users/13460/mika">mika</a> suggested.</p>
  
  <p>Here's my source, if you're interested.  This is where I set <strong>SkinSrc</strong>.</p>
  
  <pre><code>''' &lt;summary&gt;Create new DNN tab/page.&lt;/summary&gt;
          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 &gt; 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
  </code></pre>
  
  <p>These next two functions were taken from the DNN source and tweaked slightly, so I can't take credit for much of them.  Also, if you use these in your own modules there could be issues when upgrading DNN.  Although the upgrade from 5.05 to 5.06 went smoothly for me.</p>
  
  <p>In the <strong>AddNewModule</strong> function, I used <strong>ContainerSrc</strong> to specify the custom container to use.  <strong>PaneName</strong> is the property used to specify which panel the module should be placed in.</p>
  
  <pre><code>#Region "From DNN Source --mostly"
  
  #Region "Enums"
  
          Private Enum ViewPermissionType
              View = 0
              Edit = 1
          End Enum
  
  #End Region
  
          ''' -----------------------------------------------------------------------------
          ''' &lt;summary&gt;Adds a New Module to a Pane&lt;/summary&gt;
          ''' &lt;param name="align"&gt;The alignment for the Module&lt;/param&gt;
          ''' &lt;param name="desktopModuleId"&gt;The Id of the DesktopModule&lt;/param&gt;
          ''' &lt;param name="permissionType"&gt;The View Permission Type for the Module&lt;/param&gt;
          ''' &lt;param name="title"&gt;The Title for the resulting module&lt;/param&gt;
          ''' &lt;param name="paneName"&gt;The pane to add the module to&lt;/param&gt;
          ''' &lt;param name="position"&gt;The relative position within the pane for the module&lt;/param&gt;
          ''' -----------------------------------------------------------------------------
          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 &gt; 0 Then
                      objModule.CacheTime = objModuleDefinition.DefaultCacheTime
                      If Portals.PortalSettings.Current.DefaultModuleId &gt; Null.NullInteger AndAlso Portals.PortalSettings.Current.DefaultTabId &gt; 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 &lt;&gt; "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
  
          ''' -----------------------------------------------------------------------------
          ''' &lt;summary&gt;Adds a Module Permission&lt;/summary&gt;
          ''' &lt;param name="permission"&gt;The permission to add&lt;/param&gt;
          ''' &lt;param name="roleId"&gt;The Id of the role to add the permission for.&lt;/param&gt;
          ''' -----------------------------------------------------------------------------
          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
  </code></pre>