前面的文章我們講到,為了實現DotNetNuke在新窗口中查看或者編輯內容,我們需要自己來創建一個屬於我們自己的Default.aspx文件,然後,用這個文件來實現我們的目的。
讀者朋友們可能的問題就是:為什麼要自己創建一個新的Default.aspx?這樣做,是不是已經把DotNetNuke原本清晰的業務邏輯給打亂了?會不會因為這樣,而造成原本清晰、簡單的DotNetNuke開發層次結構混亂?
這裡需要和大家澄清的是,我們增加一個頁面,這個頁面,只是為了完成“在新窗口中打開或者編輯內容”這樣一個目的,為了同時實現這個目的,並且不影響到DotNetNuke本身的層次結構,我們必須要做到以下的幾點:
1、決不能影響到DotNetNuke的開發結構;
2、決不能再現有的開發結構中任意增加或者刪減;
3、即使沒有我們新增的這個網頁,我們也必須要保證DotNetNuke能夠正確無誤的運行;
4、所有的底層解析機制,仍然由DotNetNuke完成;
好了,我個人當然非常喜歡DotNetNuke清晰明了的開發結構,如果影響到這個結構的話,那麼,我就寧可不做這件事情了(那就可能要使用其他的CMS系統,與DotNetNuke失之交臂了)。
好的,下面,我們以Edit.aspx來代指我們新增的頁面,首先,我們這個頁面將全部復制Default.aspx和其代碼文件,將之改名為 Edit.aspx。進行了此項更改之後,當我們再發布我們的模塊的時候,就需要將Edit.aspx文件放到DotNetNuke安裝目錄的根目錄下,同時還需要將之aspx.vb文件放到這個目錄下(或者是將編譯之後的dll文件放到bin目錄下。
在我們新增的Edit.aspx.vb文件代碼的Page_Init方法上,進行一些修改(這個文件原本是從Default.aspx文件復制過來的)
如下:
Dim strSkinSrc As String = PortalSettings.ActiveTab.SkinSrc.Replace(".ascx", "_mini.ascx")
' skin preview
If (Not Request.QueryString("SkinSrc") Is Nothing) Then
PortalSettings.ActiveTab.SkinSrc = SkinController.FormatSkinSrc(QueryStringDecode(Request.QueryString("SkinSrc")) & ".ascx", PortalSettings)
ctlSkin = LoadSkin(PortalSettings.ActiveTab.SkinSrc)
End If
' load user skin ( based on cookie )
If ctlSkin Is Nothing Then
If Not Request.Cookies("_SkinSrc" & PortalSettings.PortalId.ToString) Is Nothing Then
If Request.Cookies("_SkinSrc" & PortalSettings.PortalId.ToString).Value <> "" Then
PortalSettings.ActiveTab.SkinSrc = SkinController.FormatSkinSrc(Request.Cookies("_SkinSrc" & PortalSettings.PortalId.ToString).Value & ".ascx", PortalSettings)
ctlSkin = LoadSkin(PortalSettings.ActiveTab.SkinSrc)
End If
End If
End If
' load assigned skin
If ctlSkin Is Nothing Then
If IsAdminSkin(PortalSettings.ActiveTab.IsAdminTab) Then
Dim objSkin As UI.Skins.SkinInfo
objSkin = SkinController.GetSkin(SkinInfo.RootSkin, PortalSettings.PortalId, SkinType.Admin)
If Not objSkin Is Nothing Then
PortalSettings.ActiveTab.SkinSrc = objSkin.SkinSrc
Else
PortalSettings.ActiveTab.SkinSrc = ""
End If
End If
If PortalSettings.ActiveTab.SkinSrc <> "" Then
PortalSettings.ActiveTab.SkinSrc = SkinController.FormatSkinSrc(strSkinSrc, PortalSettings) 'PortalSettings.ActiveTab.SkinSrc
ctlSkin = LoadSkin(PortalSettings.ActiveTab.SkinSrc)
End If
End If
' error loading skin - load default
If ctlSkin Is Nothing Then
' could not load skin control - load default skin
If IsAdminSkin(PortalSettings.ActiveTab.IsAdminTab) Then
PortalSettings.ActiveTab.SkinSrc = Common.Globals.HostPath & SkinInfo.RootSkin & DefaultSkin.Folder & DefaultSkin.AdminDefaultName
Else
PortalSettings.ActiveTab.SkinSrc = Common.Globals.HostPath & SkinInfo.RootSkin & DefaultSkin.Folder & DefaultSkin.DefaultName
End If
ctlSkin = LoadSkin(strSkinSrc) 'PortalSettings.ActiveTab.SkinSrc)
End If
' set skin path
PortalSettings.ActiveTab.SkinPath = SkinController.FormatSkinPath(strSkinSrc) 'PortalSettings.ActiveTab.SkinSrc)