说是做插件其实名不副实,其实是直接用DNT2.0的源代码进行改造,在用户信息部分添加一些需要的字段,技术含量不高,主要是介绍如何在别人系统中加入自己的东西,提供点思路。
这是我在2008年6月28日写的帖子,发在nt.discuz.net上的,现在转回来备份一下。原文地址:http://nt.discuz.net/showtopic-50906.html
说是做插件其实名不副实,其实是直接用DNT2.0的源代码进行改造,在用户信息部分添加一些需要的字段,技术含量不高,主要是介绍如何在别人系统中加入自己的东西,提供点思路。
源代码下载地址(792K)
交友插件主要功能是让会员填写更详细的个人信息和个性信息,并让其他人能够查看,通过这些信息,加深会员间的了解。
一、需求:
1、允许注册1个字符长度的帐户
2、会员可以填写个人信息,可以修改自己的信息,可以查看别人的信息。
二、结果:
该插件通过修改源代码和模板,实现了与DNT2.0的无缝结合,外观表现和操作都非常自然。在用户中心添加了“编辑个人信息”页,允许用户自由修改资料;修改“查看用户信息”页,将会员资料展示在其中。
三、修改前要准备和规划的:
a、得到DNT2.0源代码,并用vs2005打开解决方案sln。打开Discuz.Web项目中的\aspx\1目录,这里面是Discuz.ForumPage命名空间的逻辑层代码所在地,我们大部分页面逻辑要添加在里面。
b、打开\templates\default目录,这是原始模板的地址,页面表现需要对其中部分进行修改,并有新的模板文件要被创建。
c、规划一下,共要修改4个模板,新建1个模板;修改2个页面逻辑,新建1个页面逻辑;数据库要加1个表;采用单层来写这个表的对应DAL;使用XML实现数字字典来管理个人信息。
d、用管理后台将模板生成的页面会自动加上Inherits="Discuz.ForumPage.xxxxxx",就是说页面逻辑需要写在Discuz.Web项目中并进行编译才是最干净的做法,这样可以避免像“会员生日插件”那样需要在模板中添加命名空间的引用。
=============下面具体说明我是如何修改的===============
四、建立Discuz.Plugin.Friend插件项目,该项目主要功能是对Personinfo表进行增改查操作,对个人信息的勾选部分进行字典支持,是信息的底层。
1、建立数据库PersonInfo表,用于储存会员的个人信息,信息具体内容参考截图。
--详见
附件中代码
Code
CREATE TABLE [dbo].[PersonInfo] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[uid] [int] NULL ,
[Lookfor] [int] NULL ,
[Title] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Intro] [nvarchar] (300) COLLATE Chinese_PRC_CI_AS NULL ,
[Height] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Stature] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Marriagestate] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Industry] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Job] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Constellation] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Blood] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[EduLevel] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[School] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Earning] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Personality] [nvarchar] (1400) COLLATE Chinese_PRC_CI_AS NULL ,
[Describing] [nvarchar] (1400) COLLATE Chinese_PRC_CI_AS NULL ,
[Predominance] [nvarchar] (1400) COLLATE Chinese_PRC_CI_AS NULL ,
[Fond] [nvarchar] (1400) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
2、编写数据库对象的操作类,利用SqlHelper:
Code
namespace Discuz.Plugin.Friend
{
public class PersonInfo
{
public static int Add(PersonInfo model)
{
//见附件中代码
}
public static PersonInfo GetModel(int uid)
{
//见附件中代码
}
public static void UpdateModel(PersonInfo model)
{
//见附件中代码
}
}
}
3、编写获得字典的方法:
Code
/// <summary>
/// 个人信息类型
/// </summary>
public enum PersonInfoType
{
/// <summary>
/// 个性
/// </summary>
Personality,
/// <summary>
/// 形容
/// </summary>
Describing,
/// <summary>
/// 优势
/// </summary>
Predominance,
/// <summary>
/// 爱好
/// </summary>
Fond
}
public static DataTable GetEnum(PersonInfoType pit)
{
//见附件中代码
}
4、字典部分内容:
Code
<?xml version="1.0" encoding="utf-8" ?>
<PersonInfo>
<Personality>
<PersonalityItem>冒险/疯狂</PersonalityItem>
<PersonalityItem>稳重</PersonalityItem>
<PersonalityItem>浪漫/脱俗</PersonalityItem>
</Personality>
<Describing>
<DescribingItem>追求刺激</DescribingItem>
<DescribingItem>电脑专家</DescribingItem>
</Describing>
<Predominance>
<PredominanceItem>相貌</PredominanceItem>
<PredominanceItem>身材</PredominanceItem>
</Predominance>
<Fond>
<FondItem>情感</FondItem>
<FondItem>文学</FondItem>
</Fond>
</PersonInfo>
五、修改Discuz.Web项目中的文件register,以满足需求[1]。
1、添加Discuz.Plugin.Friend项目资源引用,并将item.config拷贝至web根目录中。
2、修改\aspx\1中的register.aspx.cs,将111行的字符数限制改为1。
Code
else if (Utils.GetStringLength(tmpUsername) < 1)
{
AddErrLine("用户名不得小于1个字符");
}
3、修改\templates\default中的register.htm模板,将248行和255行分别修改字符数限制。
Code
if(unlen < 1 || unlen > 20) {
4、编译Discuz.Web项目,在后台生成register.htm模板,此时帐号注册字符数限制被修改为最少1个字符。
六、修改Discuz.Web项目中的文件userinfo,以满足需求[2]的第3点。
1、修改\aspx\1中的userinfo.aspx.cs,添加代码:
Code
using Discuz.Plugin.Friend;
public PersonInfo person;
person = PersonInfo.GetModel(id);
2、修改\templates\default中的userinfo.htm模板,将id="firestmessage"附近代码进行调整,增加person相关字段信息
Code
<ul class="firestmessage">
<li class="navname"><span>用户名:</span> {user.username}
</li>
<li><span>用户ID:</span> {user.uid} </li>
<li><span>昵称:</span> {user.nickname}</li>
<li><span>用户组:</span> {group.grouptitle}</li>
<li><span>阅读权限:</span> {group.readaccess}</li>
<li> </li>
<li><span>我要寻找:</span> <%if {person.lookfor}==0%>
男性
<%/if%>
<%if {person.lookfor}==1%>
女性
<%/if%>
<%if {person.lookfor}==2%>
男女均可
<%/if%></li>
<li><span>标题:</span> {person.title}</li>
<li><span>自我介绍:</span> {person.intro}</li>
<li><span>身高:</span> {person.height}</li>
<li><span>体型:</span> {person.stature}</li>
<li><span>目前是:</span> {person.marriagestate}</li>
<li><span>从事的行业:</span> {person.industry}</li>
<li><span>职业:</span> {person.job}</li>
<li><span>星座:</span> {person.constellation}</li>
<li><span>血型:</span> {person.blood}</li>
<li><span>教育程度:</span> {person.eduLevel}</li>
<li><span>毕业学校:</span> {person.school}</li>
<li><span>月收入:</span> {person.earning}</li>
<li> </li>
<li><span>个性:</span> {person.personality}</li>
<li><span>朋友形容我:</span> {person.describing}</li>
<li><span>优势:</span> {person.predominance}</li>
<li><span>兴趣爱好:</span> {person.fond}</li>
</ul>
3、编译Discuz.Web项目,在后台生成userinfo.htm模板,此时“查看用户信息”页已经如我所愿了。
(未完待续)