『转载』Portal学习总结
1.网站实现原理:
1>首先自定义一个XML文件用于定义网站的结构,该xml的结构由一个DataSet确定,然后再定义一个配置事务组件Configuration.cs(有6个类),用于操作DataSet来读写该xml文件,从而实现网站配置的更改及管理;
2>在客户端每次发送请求时,都会在Global.asax中的Application_BeginRequest事件中使用配置事务组件加载当前页的的配置信息(PortalSettings),如果网站的配置信息(SiteSettings)为空,也要在这里加载;
3>接着PortalSettings及SiteSettings信息传到DesktopDefault.aspx(或MobileDefault.aspx), DesktopDefault.aspx根据TabID取得当前页面的模块,再根据模块的PanelName分别显示在不同的Panel中.
2>在客户端每次发送请求时,都会在Global.asax中的Application_BeginRequest事件中使用配置事务组件加载当前页的的配置信息(PortalSettings),如果网站的配置信息(SiteSettings)为空,也要在这里加载;
3>接着PortalSettings及SiteSettings信息传到DesktopDefault.aspx(或MobileDefault.aspx), DesktopDefault.aspx根据TabID取得当前页面的模块,再根据模块的PanelName分别显示在不同的Panel中.
2.配置文件中的表,以下是表结构描述,表中的数据全部存储在一个xml文件中.
Global:站点信息配置表
字段
|
备注
|
PortalId
|
站点ID(可架设多个门户站点而共享一个数据库,通过PortalID区分)
|
PortalName
|
站点名称
|
AlwaysShowEditButton
|
是否总是显示编辑按钮
|
Tab:导航栏标签信息表
字段
|
备注
|
TabId
|
标签ID
|
TabName
|
标签名称
|
AccessRoles
|
可访问该标签的角色
|
TabOrder
|
标签排序号
|
ShowMobile
|
该标签是否在“移动设备浏览器”上显示
|
MobileTabName
|
在“移动设备浏览器”上显示的名称
|
Module:用户模块表(显示在网站上的各个功能模块;如:快速链接,公告等)
字段
|
备注
|
ModuleId
|
模块ID
|
ModuleTitle
|
模块名称
|
EditRoles
|
可编辑该模块的角色
|
ModuleDefId
|
关联用户模块定义表的Id,指明该用户模块是由哪个模板实现
|
PaneName
|
标注显示在“左中右”哪个Panel中
|
CacheTimeout
|
缓存时间
|
ModuleOrder
|
显示的顺序
|
ShowMobile
|
是否在“移动设备浏览器”上显示
|
ModuleDefinition:用户模板定义表(设置用户模板,由那个用户控件实现,系统默认给出了十个用户模板和五个管理模板,可以在扩充)
字段
|
备注
|
ModuleDefId
|
模板ID
|
FriendlyName
|
模板名称
|
DesktopSourceFile
|
“桌面浏览器”上显示的用户控件源文件地址
|
MobileSourceFile
|
“移动设备浏览器”上显示的用户控件源文件地址
|
Settings和Setting:当为XML/XSL模板和图片模板时设置XML/XSL文件和图片的地址。
3.网站中各文件的作用
文件名
|
说明
|
Admin文件夹
|
网站管理文件夹
|
AccessDenied.aspx
|
访问失败(无访问权)时复位向到的页面
|
EditAccessDenied.aspx
|
编辑失败(无编辑权)时复位向到的页面
|
Logoff.aspx
|
注销页面;移出身份认证信息,使Cookie无效
|
ManageUsers.aspx
|
新增和修改用户信息页面
|
ModuleDefinitions.aspx
|
新增和修改用户模板控件页面,可在这里添加信息用户功能模板
|
ModuleDefs.ascx
|
修改模块信息的管理功能模板
|
ModuleSettings.aspx
|
用户模块信息设置页面
|
NotImplemented.aspx
|
当未提供相应的链接内容时,复位向到的页面
|
Register.aspx
|
用户注册页面
|
Roles.ascx
|
修改角色信息的管理功能模板
|
SecurityRoles.aspx
|
修改用户角色的页面
|
SiteSettings.ascx
|
修改网站信息的管理功能模板
|
TabLayout.aspx
|
修改标签名称,访问角色以及选定显示在该标签下的用户模块及显示位置。
|
Tabs.ascx
|
修改标签信息的管理功能模板
|
Users.ascx
|
修改用户信息的管理功能模板
|
Components文件夹
|
各模块数据返回组件文件夹
|
AnnouncementsDB.cs
|
公共信息表的数据库访问类;包含增、删、改,获取模块中全部的及单个的公告信息(以下各用户模块的数据库访问表基本上都包含这些方法)
|
Configuration.cs
|
配置信息相关的事务组件(有6个类)
|
ContactsDB.cs
|
联系方式信息表的数据库访问类
|
DesktopControls.cs
|
“桌面浏览器”的用户控件基类;
|
DiscussionDB.cs
|
讨论数据表的数据库访问类
|
DocumentDB.cs
|
文档数据表的数据库访问类
|
EventsDB.cs
|
事件信息表的数据库访问类
|
HtmlTextDB.cs
|
HTML文本信息表的数据库访问类
|
LinksDB.cs
|
链接信息表的数据库访问类
|
MobileControls.cs
|
“移动设备浏览器”的用户控件基类;
|
RolesDB.cs
|
角色信息表的数据库访问类
|
Security.cs
|
包含两个类PortalSecurity(网站身份认证用到的类)和 UsersDB(网站用户的数据访问类)
|
Data文件夹
|
存放用户在建设网站中用到的图片,XML文件等
|
DesktopModules文件夹
|
存放在“桌面浏览器”上显示的用户控件ascx及aspx
|
Announcements.ascx
|
“公告”模板用户控件
|
Contacts.ascx
|
“联系方式”模板用户控件
|
DiscussDetails.aspx
|
显示讨论明细的页面
|
Discussion.ascx
|
“讨论”模板用户控件
|
Document.ascx
|
“文档”模板用户控件
|
EditAnnouncements.aspx
|
编辑公告的页面
|
EditContacts.aspx
|
编辑联系方式的页面
|
EditDocs.aspx
|
编辑文档的页面
|
EditEvents.aspx
|
编辑事件的页面
|
EditHtml.aspx
|
编辑HTML文本的页面
|
EditImage.aspx
|
编辑图片地址的页面
|
EditLinks.aspx
|
编辑链接的页面
|
EditXml.aspx
|
编辑XML/XSL模板控件中XML/XSL文件地址的页面
|
Events.ascx
|
“事件”模板用户控件
|
HtmlModule.ascx
|
“HTML文本”模板用户控件
|
ImageModule.ascx
|
“图片”模板用户控件
|
Links.ascx
|
“链接”模板用户控件
|
QuickLinks.ascx
|
“快速链接”模板用户控件
|
Signin.ascx
|
“登录”用户控件
|
ViewDocument.aspx
|
查看文档页面
|
XmlModule.ascx
|
“XML/XSL”模板用户控件
|
Docs文件夹
|
门户文档(发布网站时可不要)
|
Images文件夹
|
存放门户网站框架所必需的图片
|
MobileModules文件夹
|
存放在“移动设备浏览器”上显示的用户控件文件夹和DesktopModules中内容差不多
|
SourceViewer文件夹
|
Starter Kit 源代码浏览器用到的一些文件(发布网站时可不要)
|
Uploads文件夹
|
文档模块中上传到服务器上的文档可放在该目录下
|
ASPNETPortal.css
|
样式文件,修改它可以改变网站外观
|
Default.aspx
|
入口页,判断程序是在“桌面浏览器”中运行还是“移动设备浏览器”中运行,然后决定转到那个首页(DesktopDefault.aspx OR MobileDefault.aspx)
|
DesktopDefault.aspx
|
“桌面浏览器”中运行的首页
|
DesktopModuleTitle.ascx
|
“桌面浏览器”中模块标题控件。
|
DesktopPortalBanner.ascx
|
“桌面浏览器”中页面的Top部分,包含导航栏标签和当前用户信息
|
Global.asax
|
初始载入网站的配置文件。
|
MobileDefault.aspx
|
“移动设备浏览器”中运行的首页
|
MobileModuleTitle.ascx
|
“移动设备浏览器”中模块标题控件。
|
PortalCfg.cs
|
用户配置文件的数据集设置架构文件,包含对配置文件中各个数据表的属性、方法和事件定义
|
PortalCfg.xml
|
用户配置文件的XML数据
|
PortalCfg.xsd
|
用户配置文件的架构
|
Web.config
|
|
4.数据库中的表
Portal_Announcements:公告信息表(在公告信息模块中用)
字段名
|
类型
|
含义
|
备注
|
ItemID
|
Int
|
链接Id
|
主键(自动编号)
|
ModuleID
|
Int
|
所属模块ID
|
决定该公告在哪个模块中显示(模块ID:用户配置文件PortalCfg.xml中的模块ID,以下皆同)
|
CreatedByUser
|
Nvarchar(100)
|
创建者
|
记录创建和修改该公告的用户
|
CreatedDate
|
Datetime
|
创建时间
|
记录创建和修改该公告的时间
|
Title
|
Nvarchar(100)
|
名称
|
|
MoreLink
|
Nvarchar(150)
|
更多细节的链接
|
|
MobileMoreLink
|
Nvarchar(150)
|
移动细节链接地址
|
在“移动设备浏览器”上的更多细节链接地址
|
ExpireDate
|
Datetime
|
有效日期
|
|
Description
|
Nvarchar(2000)
|
描述
|
|
Portal_Contacts:联系方式信息表(在联系方式模块中用)
字段名
|
类型
|
含义
|
备注
|
ItemID
|
Int
|
链接Id
|
主键(自动编号)
|
ModuleID
|
Int
|
所属模块ID
|
决定该联系方式在那个模块中显示
|
CreatedByUser
|
Nvarchar(100)
|
创建者
|
记录创建和修改该联系方式的用户
|
CreatedDate
|
Datetime
|
创建时间
|
记录创建和修改该联系方式的时间
|
Name
|
Nvarchar(50)
|
联系人姓名
|
|
Role
|
Nvarchar(100)
|
联系人角色
|
与系统框架中的角色不同,理解成职位更合适
|
Email
|
Nvarchar(100)
|
联系人Email
|
|
Contact1
|
Nvarchar(250)
|
联系方式1
|
|
Contact2
|
Nvarchar(250)
|
联系方式2
|
|
Portal_Discussion:用户讨论留言信息表(用户讨论模块用)
字段名
|
类型
|
含义
|
备注
|
ItemID
|
Int
|
链接Id
|
主键(自动编号)
|
ModuleID
|
Int
|
所属模块ID
|
决定该讨论在那个模块中显示
|
Title
|
Nvarchar(50)
|
讨论标题
|
|
CreatedDate
|
Datetime
|
创建时间
|
记录创建该讨论的时间
|
Body
|
Nvarchar(100)
|
留言内容
|
|
CreatedByUser
|
Nvarchar(100)
|
创建者
|
记录创建和修改该讨论的用户
|
DisplayOrder
|
Nvarchar(100)
|
显示顺序
|
记录回复的讨论的时间和本身提交的时间(可用作讨论留言的排序和显示回复关系)
|
Portal_Documents:用户上传文档信息表(在显示文档信息模块中用)
字段名
|
类型
|
含义
|
备注
|
ItemID
|
Int
|
链接Id
|
主键(自动编号)
|
ModuleID
|
Int
|
所属模块ID
|
决定该联系方式在那个模块中显示
|
CreatedByUser
|
Nvarchar(100)
|
创建者
|
记录创建和修改该联系方式的用户
|
CreatedDate
|
Datetime
|
创建时间
|
记录创建和修改该联系方式的时间
|
FileNameUrl
|
Nvarchar(250)
|
|
上传至服务器中的文件路径,(可由系统重新命名)
|
FileFriendlyName
|
Nvarchar(150)
|
文档名称
|
友好的文件名称显示
|
Category
|
Nvarchar(50)
|
类别
|
|
Content
|
Image
|
内容(二进制)
|
上传到数据库中的内容
|
ContentType
|
Nvarchar(50)
|
类型
|
上传文件的类型
|
ContentSize
|
Int
|
大小
|
上传文件的大小
|
Portal_Events:事件信息表(在显示事件信息的模块中使用)
字段名
|
类型
|
含义
|
备注
|
ItemID
|
Int
|
链接Id
|
主键(自动编号)
|
ModuleID
|
Int
|
所属模块ID
|
决定该事件在哪个模块中显示
|
CreatedByUser
|
Nvarchar(100)
|
创建者
|
记录创建和修改该事件的用户
|
CreatedDate
|
Datetime
|
创建时间
|
记录创建和修改该事件的时间
|
Title
|
Nvarchar(100)
|
事件名称
|
|
WhereWhen
|
Nvarchar(150)
|
发生地点
|
|
Description
|
Nvarchar(2000)
|
描述
|
|
ExpireDate
|
Datetime
|
有效日期
|
|
Portal_HtmlText:静态HTML信息表(在显示静态HTML的模块中用,可用于显示新闻等文本)
字段名
|
类型
|
含义
|
备注
|
ModuleID
|
Int
|
所属模块ID
|
决定该静态HTML在哪个模块中显示(主键,限定一个模块只对应一个静态HTML文件)
|
DesktopHtml
|
Ntext
|
桌面HTML内容
|
|
MobileSummary
|
Ntext
|
移动摘要
|
在“移动设备浏览器”上显示的摘要
|
MobileDetails
|
Ntext
|
移动细节
|
在“移动设备浏览器”上显示的细节
|
Portal_Links:链接信息表(快速链接模块和连接模块用)
字段名
|
类型
|
含义
|
备注
|
ItemID
|
Int
|
链接Id
|
主键(自动编号)
|
ModuleID
|
Int
|
所属模块ID
|
决定该链接在那个模块中显示
|
CreatedByUser
|
Nvarchar(100)
|
创建者
|
记录创建和修改该链接的用户
|
CreatedDate
|
Datetime
|
创建时间
|
记录创建和修改该链接的时间
|
Title
|
Nvarchar(100)
|
名称
|
|
Url
|
Nvarchar(250)
|
链接地址
|
|
MobileUrl
|
Nvarchar(250)
|
移动链接地址
|
|
ViewOrder
|
Int
|
排序号
|
|
Description
|
Nvarchar(2000)
|
描述
|
|
Portal_Roles:角色信息表(门户网站引擎核心表)
字段名
|
类型
|
含义
|
备注
|
RoleID
|
Int
|
角色Id
|
主键(自动编号)
|
PortalID
|
Int
|
门户网址ID
|
可架设多个门户站点而共享一个数据库,通过PortalID区分
|
RoleName
|
Nvarchar(50)
|
角色名称
|
|
Portal_UserRoles:用户角色关系表(门户网站引擎核心表)
字段名
|
类型
|
含义
|
备注
|
UserID
|
Int
|
用户Id
|
关联用户信息表(Portal_Roles)
|
RoleID
|
Int
|
角色Id
|
管理角色信息表(Portal_Users)
|
Portal_Users:用户信息表(门户网站引擎核心表)
字段名
|
类型
|
含义
|
备注
|
UserID
|
Int
|
用户Id
|
主键(自动编号)
|
Name
|
Nvarchar(50)
|
用户姓名
|
|
Password
|
Nvarchar(50)
|
密码
|
采用MD5的加密方式存储
|
Email
|
Nvarchar(100)
|
用户Email
|
用于登录,并设置成唯一性索引(可防止注册相同的Email,这样设置后当有相同的Email插入时程序就会抛出异常,捕获这个异常就可判断Email是否重复,这样就可以省掉判断Email是否重复的代码)
|
5.数据库中的存储过程:
存储过程名称
|
说明
|
Portal_AddAnnouncement
|
添加新公告
|
Portal_AddContact
|
添加新联系方式
|
Portal_AddEvent
|
添加新事件
|
Portal_AddLink
|
添加新链接
|
Portal_AddMessage
|
新建一条新的讨论留言,其中@ParentID的参数为被回复留言的Id,通过该ID找到该留言的DisplayOrder,加上新增留言的时间就是新留言的DisplayOrder。
|
Portal_AddRole
|
添加角色信息
|
Portal_AddUser
|
添加一个新用户,返回用户的Id
|
Portal_AddUserRole
|
添加用户角色关系
|
Portal_DeleteAnnouncement
|
删除公告信息(注:以下删除部分若无特殊说明均为删除指定ItemID的信息)
|
Portal_DeleteContact
|
删除联系方式
|
Portal_DeleteDocument
|
删除用户上传文档
|
Portal_DeleteEvent
|
删除事件信息
|
Portal_DeleteLink
|
删除链接信息
|
Portal_DeleteModule
|
当删除一个模块时,联动的删除该模块相关的全部信息
|
Portal_DeleteRole
|
删除角色信息
|
Portal_DeleteUser
|
删除用户
|
Portal_DeleteUserRole
|
删除角色用户关系
|
Portal_GetAnnouncements
|
根据ModuleID(模块ID)返回有效期内的公告信息
|
Portal_GetAuthRoles
|
根据PortalID及ModuleID返回模块的可访问角色AccessRoles及可编辑角色EditRoles.不过像是没有用到该存储过程,而且该存储过程涉及的表(Portal_Modules,Portal_Tabs)在数据库中没有(在用户配置文件中有类似的表),通过这个存储过程可以继续加强对模块的权限管理.
|
Portal_GetContacts
|
根据ModuleID(模块ID)返回联系方式
|
Portal_GetDocumentContent
|
根据文档的(ItemID)获取存储在数据库中的文档信息
|
Portal_GetDocuments
|
根据ModuleID(模块ID)返回用户上传文档信息
|
Portal_GetEvents
|
根据ModuleID(模块ID)返回有效期内的事件信息
|
Portal_GetHtmlText
|
根据ModuleID(模块ID)返回静态HTML文本信息
|
Portal_GetLinks
|
根据ModuleID(模块ID)返回连接信息,并按(ViewOrder)排序号排序
|
Portal_GetNextMessageID
|
获取讨论的下一条留言
|
Portal_GetPortalRoles
|
获取指定门户站点(指定PortalID)的全部角色信息
|
Portal_GetPrevMessageID
|
获取讨论的上一条留言
|
Portal_GetRoleMembership
|
根据角色ID获取该角色对应的用户成员信息
|
Portal_GetRolesByUser
|
根据用户Email获取用户角色信息
|
Portal_GetSingleAnnouncement
|
根据公告的(ItemID),获取单个公告的信息
|
Portal_GetSingleContact
|
根据联系方式的(ItemID),获取单个联系方式的信息
|
Portal_GetSingleDocument
|
根据文档的(ItemID),获取单个文档的信息
|
Portal_GetSingleEvent
|
根据事件的(ItemID),获取单个事件的信息
|
Portal_GetSingleLink
|
根据链接的(ItemID),获取单个链接的信息
|
Portal_GetSingleMessage
|
根据留言的(ItemID),获取单个留言的信息
|
Portal_GetSingleRole
|
根据角色ID,获取单个角色的信息
|
Portal_GetSingleUser
|
根据用户Email,获取单个用户的信息
|
Portal_GetThreadMessages
|
根据父留言信息的DisplayOrder,返回按时间顺序和回复关系返回子留言信息
|
Portal_GetTopLevelMessages
|
根据ModuleID(模块ID)返回顶层留言信息
|
Portal_GetUsers
|
获取全部的用户信息,并按Email排序
|
Portal_UpdateAnnouncement
|
更新公告信息
|
Portal_UpdateContact
|
更新联系方式信息
|
Portal_UpdateDocument
|
更新文档信息,当未找到指定文档ID时添加新的文档信息
|
Portal_UpdateEvent
|
更新事件信息
|
Portal_UpdateHtmlText
|
更新静态HTML文本信息
|
Portal_UpdateLink
|
更新指定的连接信息
|
Portal_UpdateRole
|
更新角色信息
|
Portal_UpdateUser
|
更新用户信息
|
Portal_UserLogin
|
根据email和password返回登录的用户姓名(用于判断用户登录是否通过)
|