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以按钮的形式显示

 

 

 


 

posted @ 2007-02-25 00:11  烈马狂生  阅读(431)  评论(0编辑  收藏  举报