创建社区
在下载和安装 Community Starter Kit 之后,您希望做的第一件事情会是删除示例站点数据。这可以通过单击导航条底部的“Login”链接并以 Admin 用户身份用 Admin 密码登录来完成。(由于该密码会造成安全风险,因此请尽快更改该密码。)在成功登录之后,新链接 (Admin) 将出现在导航条上。单击该链接跳转到站点的管理部分,向下滚动,查找“Delete Content”链接。
当删除内容之后返回到社区主页 时,您会注意到一些示例内容仍保留着。要将主页内容替换为自己的内容,需要返回到管理页,单击“Edit Sections”,单击“Home”区域,并提供一个站点标题、说明和徽标。还可以使用这个“Edit Sections”选项来更改主页的基本布局、选择主题或者启用主页的许多可选功能(如显示 Web 箱或 Web 服务箱)。
在设置了主页的布局以后,可以向站点中添加多个区域。一个站点可以有无限多个区域。图 3 列出了可创建的各种类型的区域(或模块)。
要 添加一个区域,请从管理页单击“Edit Sections”链接。您可以创建多个类型相同的区域。例如,图 2 中显示的社区站点包括两个文章区域:News 和 Articles。可以使用父区域来帮助组织一组类似的区域。例如,如果您希望按一般分类来分离下载内容,则可以创建一个包含几个下载区域(如 User Contributions、Controls 和 Speaker Presentations)的父区域。
从“Edit Sections”页,可以启用适用于特定区域的各种可选功能,如仲裁或电子邮件通知。还可以选择将该区域的内容作为社区 Web 服务来发布。
使用主题
Community Starter Kit 是基于 ASP.NET Forums 应用程序设计的,与 Forums 应用程序一样,它也使用主题(又称作外观)来将用户界面与代码分开。主题远不只是样式表。实际上,没有主题,就会没有内容,这是由于主题包含所有显示在站 点上的控件。主题由图 4 中列出的元素组成。
要新建主题,需要在 Communities\Common\Themes 文件夹下面添加一个文件夹。主题的名称派生自该文件夹的名称。在该文件夹下面,创建图 4中显示的文件夹。幸运的是,由于所有的主题都从基本主题 Default 继承,所以您不必填充主题的所有文件夹。因此,如果您不提供主题所需的外观,Community Starter Kit 会使用 Default 主题的外观。
尽 管 Default 主题包含 75 个以上的文件,您仍可以通过只提供几个文件来创建基本主题。我创建了一个名为 Small 的基本主题,它是 Default 主题的精简版本。它与 Default 主题的基本区别在于,其采用更小的字体,颜色由蓝色改为红色,默认页部分采用不同的布局。我的新主题由下列六个文件组成:
• |
Communities\Common\Themes\Small\Images\ redshiny3dsquarebullet_7x7.jpg |
• |
Communities\Common\Themes\Small\Skins\ControlSkins\ Sections_SectionMenu.ascx |
• |
Communities\Common\Themes\Small\Skins\PageSkins\Default.ascx |
• |
Communities\Common\Themes\Small\Styles\an_red_arrow.gif |
• |
Communities\Common\Themes\Small\Styles\Default.css |
• |
Communities\Common\Themes\Small\Styles\redyellowstar.gif |
当然,提供的元素越多,主题将越完整。例如,如果您深入到使用 Small 主题的某个区域,仍将看到具有蓝色背景的控件。但是,如果我没有更改过该主题的配色方案,这就是最明智的做法了。要新建一个主题,最简单的方法就是以现有的主题作为模型,然后修改其外观和样式。
创建新模块
尽管这比创建主题有点复杂,但是您还可以为社区创建新模块。例如,我创建了一个名为 Jobs 的模块,用它来跟踪工作公告。
要新建模块,首先向 CommunityStarterKit 数据库中添加一个用来跟踪新模块项的新表,并将该表命名为 Community_module(其中,module 是新模块的名称)。该表的主键应当命名为 module_ContentPageID,连同要针对该模块收集的其他字段的名称。
您 将需要可用于添加新模块项的存储过程,编辑现有项目,检索项目列表,然后检索单个项目的所有字段。将 Jobs 模块的存储过程命名为 Community_JobsAddJob、Community_JobsEditJob、Community_JobsGetJobs 和 Community_JobsGetJob。我复制了 Articles 模块的存储过程,将它们用作 Jobs 存储过程的模型,并添加跟踪工作公告所必需的其他字段。Community_JobsGetJobs 用于检索 Jobs_Section 页中的工作列表。该模块调用 Community_GetPagedSortedContent 函数以对输出内容进行分页(请参阅图 5)。
在 Engine\Modules 下创建一个将包含该模块代码的新文件夹。在该文件夹下,应当有三个名为 Components、Content 和 Controls 的子文件夹。对于 Jobs 模块,我创建了 Engine\Modules\Jobs\Components、Engine\Modules\Jobs\Content 和 Engine\Modules\Jobs\Controls folders。Components 文件夹应当包含两个类库,第一个类库包含从 ContentInfo 类派生的类,第二个类库包含负责调用每个模块的存储过程的实用工具类。
使用 Visual Basic .NET 版本的 Community Starter Kit,我创建了一个名为 JobInfo.vb 的类库,其中包含一个单一类 (JobInfo)。我将 ArticleInfo.vb 类库用作我的类库的模型。JobInfo 构造函数使用单一参数 DataReader,通过该参数从 Jobs 表抽取每个字段,并将它们放入随后将作为 JobInfo 类的一系列属性公开的私有变量中(请参阅图 6 中的代码)。
JobUtility 类提供 Jobs 模块和 Jobs 存储过程之间的接口,其中包含单一类 JobUtility,该类有四种方法:AddJob、EditJob、GetJobs 和 GetJobInfo。GetJobs 方法负责调用 Community_JobsGetJobs 存储过程并返回 JobInfo 对象的 ArrayList(请参阅图 7)。
对 于该模块支持的每个基本类型的页面,Content 文件夹都应当包含一个类库。这些类将成为以后创建的用户控件的代码。至少,您的模块需要为下面每种类型的页面提供类:添加项目、编辑项目、显示项目列表 (对于区域页)和显示单个项目(对于项目深化页)。这些类需要分别从 ContentAddPage、ContentEditPage、ContentListPage 或 ContentItemPage 派生。正如您可能已经注意到的那样,Content 往往与它们所调用的存储过程具有一对一对应关系。
我创建了四个类库 (AddJob.vb、EditJob.vb、JobSection.vb 和 Job.vb),每个类库都以 Articles 内容类库为模型。内容类用来粘附 JobInfo 类和用户控件外观。Job.vb 类库中的 Job 类负责显示特定工作列表的完整信息(请参见图 8)。
对 于显示在 Job 和 JobSection 页上的每个工作项,Controls 文件夹将包含自定义的服务器控件。我为 Job 页创建了下列服务器控件:JobCompany、JobTempStatus、JobTempMonths、JobStartDate、 JobLocation、JobEducation、JobExperience、JobSalary、JobContactName、 JobContactPhone、JobContactEmail、JobContactWeb 和 JobEditContent。对于 JobSection 页,我创建了 ItemJobLocation 控件。JobCompany 自定义控件显示在图 9 中。
现在,您需要创建一些用户控件,来表示与在上一步中创建的 SkinnedCommunityControl 类相对应的每个基本模块页的内容外观。至少,您必须为 Default 主题提供一组内容外观用户控件。还可以为其他主题提供内容外观用户控件。
我 在 Themes\Default\Skins\ContentSkins 文件夹下创建了三个用户控件:Jobs_AddJob.ascx、Jobs_JobSection.ascx 和 Jobs_Job.ascx。没有用来编辑工作的用户控件,这是因为 Jobs_AddJob.ascx 控件执行双重任务,它为添加工作和编辑工作均提供支持。图 10 中显示了 Jobs_Job.ascx 用户控件的摘录。请注意对 Engine\Modules\Jobs\Controls 文件夹中名为 JobCompany 和 JobTempStatus 的自定义服务器控件的引用。
此时,我向新内容控件的默认样式表 (Themes\theme\ Styles\default.css) 添加了样式。图 11 显示了其中的几个新样式。
最 后,我向数据库中的 Community_PageTypes 和 Community_NamedPages 表添加了用于该项目以及项目区域页的条目。借助于模仿现有 Community_MaintenanceInitializeArticles 存储过程创建的名为 Community_ MaintenanceInitializeJobs 的存储过程,该步骤要相对简单。运行该存储过程会创建必要的表格条目。![](https://www.cnblogs.com/images/cnblogs_com/nerozhang/csk002.jpg)
图 12 JobSection 页面
![](https://www.cnblogs.com/images/cnblogs_com/nerozhang/csk003.jpg)
图 13 Job 页