说是做插件其实名不副实,其实是直接用DNT2.0的源代码进行改造,在用户信息部分添加一些需要的字段,技术含量不高,主要是介绍如何在别人系统中加入自己的东西,提供点思路。
交友插件主要功能是让会员填写更详细的个人信息和个性信息,并让其他人能够查看,通过这些信息,加深会员间的了解。
七、在Discuz.Web项目中新建userpersoninfo.aspx页面,编写对应逻辑,完成会员修改自己个人信息的功能,以满足需求[2]的前2点。
1、在\aspx\1中建立userpersoninfo.aspx页,会产生对应的.cs文件。
2、在userpersoninfo.aspx.cs文件中添加呈现逻辑,具体代码看附件。注意这时候没必要在userpersoninfo.aspx页中写什么,因为那是会被模板生成后替换掉的东西。
Code
/// <summary>
/// 当前用户信息
/// </summary>
public UserInfo user = new UserInfo();
public PersonInfo person;
public DataTable personality;
public DataTable describing;
public DataTable predominance;
public DataTable fond;
protected override void ShowPage()
{
pagetitle = "用户控制面板";
if (userid == -1)
{
AddErrLine("你尚未登录");
return;
}
user = Users.GetUserInfo(userid);
person = PersonInfo.GetModel(userid);
personality = PersonInfo.GetEnum
(PersonInfo.PersonInfoType.Personality);
describing = PersonInfo.GetEnum
(PersonInfo.PersonInfoType.Describing);
predominance = PersonInfo.GetEnum
(PersonInfo.PersonInfoType.Predominance);
fond = PersonInfo.GetEnum(PersonInfo.PersonInfoType.Fond);
}
3、在\templates\default中复制一个usercpprofile.htm,改名为userpersoninfo.htm,在其基础上修改为我们需要的表现,如“编辑个人信息”图中所示。注意把呈现逻辑也一并写在.htm中,具体规则参考“DISCUZ!NT 2.0 模板说明文档.CHM”。
下面段代码是用于呈现大量的勾选框,是这张模板页制作的难点。
Code
<label for="personality">个
性:</label>
<div style="width:100%">
<%loop personalityitem
personality%>
<div style="width:150px;
float:left;"><input name="personality" type="checkbox" value="{personalityitem
[PersonalityItem_Text]}"
<%csharp%>
if
(("{person.personality}").IndexOf("{personalityitem[PersonalityItem_Text]}") !=
-1)
{
templateBuilder.Append("
checked='checked'");
}
<%/csharp%>
/>{personalityitem
[PersonalityItem_Text]}</div>
<%/loop%>
</div>
<br />
4、在userpersoninfo.aspx.cs文件中添加更新personinfo的逻辑,具体代码看附件。
Code
if (DNTRequest.IsPost())
{
if (ForumUtils.IsCrossSitePost())
{
AddErrLine("您的请求来路不正确,无法提交。如果您安装了某种默认屏蔽来路信息的个人防火墙软件(如 Norton Internet Security),请设置其不要禁止来路信息后再试。");
return;
}
if (page_err == 0)
{
person.Lookfor = DNTRequest.GetInt("lookfor", 0);
person.Title = DNTRequest.GetString("title");
person.Intro = DNTRequest.GetString("intro");
person.Height = DNTRequest.GetString("height");
person.Stature = DNTRequest.GetString("stature");
person.Marriagestate = DNTRequest.GetString("marriagestate");
person.Industry = DNTRequest.GetString("industry");
person.Job = DNTRequest.GetString("job");
person.Constellation = DNTRequest.GetString("constellation");
person.Blood = DNTRequest.GetString("blood");
person.EduLevel = DNTRequest.GetString("eduLevel");
person.School = DNTRequest.GetString("school");
person.Earning = DNTRequest.GetString("earning");
person.Personality = DNTRequest.GetString("personality");
person.Describing = DNTRequest.GetString("describing");
person.Predominance = DNTRequest.GetString("predominance");
person.Fond = DNTRequest.GetString("fond");
PersonInfo.UpdateModel(person);
SetUrl("userpersoninfo.aspx");
SetMetaRefresh();
SetShowBackLink(true);
AddMsgLine("修改个人信息完毕");
}
}
5、编译Discuz.Web项目,在后台生成userpersoninfo.htm模板,此时“编辑个人信息”页面基本完成,可以实现功能满足要求了。
八、以上功能基本都完成了,但在“编辑个人信息”页面并不能进去,因为没有对应的菜单。下面修改菜单模板,增加菜单和对应的一些逻辑。
1、修改_permenu.htm,增加“编辑个人信息”链接。
2、修改_menu.htm,增加“编辑个人信息”链接。
3、菜单想怎么摆就怎么摆吧,这块就比较简单了。生成模板,这时整个交友插件就修改制作完成了。
九、总结
1、这种修改方式有个弊端,就是必须要源代码,而且要修改模板,难度较大。
2、好处是和源文件结合的很紧密,前台表现非常好,与论坛天衣无缝的整合在一起,没什么破绽,是符合官方的开发思路的。
3、部分模板被修改了,如果要换皮肤,需要每次将修改的5张模板进行覆盖。
4、有新的2个DLL要替换:Discuz.Web.dll、Discuz.Plugin.Friend.dll。
5、用这种方式可以对DNT2.0的会员信息进行大幅度的扩展,对于网站整合来说,可以以DNT2.0的会员为核心,在其上添加更多的业务功能,或者与网站的业务流程进行交叉,灵活性非常大。我想能使用这种方式对DNT2.0进行修改的人,用DNT2.0进行网站整合和重组都不是什么问题。
(全文完)