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
返回登录的用户姓名(用于判断用户登录是否通过)
|
说明
:
本文基本引自下面的链接
,
根据个人的学习体会稍做修改
.
4.http://www.cnblogs.com/esshs/archive/2005/04/21/142478.html