sss
在UrlRewriteModule有个功能取当前的tab和tab下的module.
PortalSettings.vb:GetPortalSettings()
IconBar.ascx是页面最上边负责站点管理的控件。
向页面加入module--ControlPanelBase.vb:AddNewModule()
setting页面出现的原理
1。在模块的基类PortalModuleBase.vb: LoadActions()
_actions.Add(GetNextActionID, Services.Localization.Localization.GetString(ModuleActionType.ModuleSettings, Services.Localization.Localization.GlobalResourceFile), ModuleActionType.ModuleSettings, "", "settings.gif", NavigateURL(TabId, "Module", "ModuleId=" & ModuleId.ToString), secure:=SecurityAccessLevel.Admin, Visible:=True)
2.当点击时相当与访问: http://localhost/DotNetNuke/Test/tabid/53/ctl/Module/ModuleId/370/Default.aspx
其中 ctl = Module
3.skin.vb中会载入 Admin/Modules/ModuleSettings.ascx
4.ModuleSettings:会载入具体模块的setting.ascx
5.前提是在.dnn文件中配置好模块ControlKey=Setting所对应的ascx
skin.vb中关于页面中模块加载的原理
主要工作都在Page_Init实现
1。首先加载ControlPanel
ctlPane.Controls.Add(objControlPanel)
2.IsAdminControl() =true ( 本质就在于ctl=null 或者 ModuleId =null)
就加载module主页面。主页面和其他页面的区别就在与controlkey=null
3.IsAdminControl() =false
就根据controlkey取该模块该key所对应的ascx
样式表的应用顺序
1.default.aspx:ManageStyleSheets()
default.css
skin.css
*sinName*.css
portal.css
2.skin.vb: InjectModule()
container.css
*ContainerName*.css
skin和Container加载的过程
1。在default.aspx的Page_Init(): SkinPlaceHolder.Controls.Add(ctlSkin)
2。在skin.vb的page_init():
首先:从数据库得到module的存放位置,并在当前的skin.ascx中找到对印的Panel Dim parent As Control = Me.FindControl(objModule.PaneName)
接着:InjectModule(parent, objModule, PortalSettings)
3. InjectModule(其中 parent = objPane):
找到容器
ctlContainer = LoadContainer(objModule.ContainerSrc, objPane)
向容器的内容部分加入module
找到容器中的放module的cell
Dim objCell As Control = ctlContainer.FindControl(glbDefaultPane)
把module放入一个临时的panel
objPanel.Controls.Add(objPortalModuleBase)
把临时的panel放入容器的contentPanel
objCell.Controls.Add(objPanel)
把容器加入道objPane
生成一个领事的容器panel,并把容器加入道这个领事的panel中
Dim ctlDragDropContainer As Panel = New Panel objPane.Controls.Add(ctlDragDropContainer) ctlDragDropContainer.Controls.Add(ctlContainer)
把容器加入道
objPane.Controls.Add(ctlContainer)
最后处理action
ProcessActionControls(objPortalModuleBase, ctlContainer)
action的原理
1。本module如果有自己的的action则重载 属性 ModuleActions
2。在module的基类PortalModuleBase.vb: LoadActions()加入所有的action
3.container.ascx决定怎么显示
SolPartActions.ascx以菜单的形式显示
ActionButton.ascx以按钮的形式显示