2008-11-15 日重新下载的,打开解决方案,生成,Discuz.Data.Access 项目的几个警告,由于目录也不需要用到 Access,把它从解决方案移除;然后重新生成解决方案:
========== 全部重新生成: 成功 24 个,失败 0 个,跳过 0 个 ==========
复制 Discuz.Web 目录,删除与部署到服务器无关的文件(upgrade 目录不要删除,如果不是升级的就建个空目录就好了,不用把目录里的文件都传上去,安装好就可以把目录删除,也不知道为何要检测这个目录!),设置好虚拟目录(默认的话要在虚拟目录的默认文档里加上 forumindex.aspx),然后运行 /bbs/install/index.aspx 进行安装(数据库连接我是用 sa,安装后记得改过来,也可能用普通用户安装),安装之前记得把目录的权限设置好(要方便就直接将论坛目录给 Users 组修改权限)。
在客户端安装时,到最后一步出现了个错误(错误源:未将对象引用设置到对象的实例),看了代码应该是在初始化数据库数据时出错,把 try 去掉(想看下是什么错误),编译下把 Discuz.Install.dll 重传下,干脆在服务器上重新安装一下,却没错误,真晕。
然后删除 install 后无用的文件,分别删除 install,upgrade 这两个目录,把 bin 目录下的以下文件也删除:
Discuz.Install.dll
Discuz.Data.Access.dll
Discuz.Data.MySql.dll
MySql.Data.dll
然后进行系统后台配置,除了一些常规设置,主要改一下积分策略和去掉友情连接,去掉扣分的;完了换论坛 Logo!
下面是修改代码部分,首先移除暂时没用到的项目:
Discuz.Album
Discuz.Space
Discuz.Space.Modules.Album
Discuz.Space.Modules
Discuz.Data.Access
Discuz.Data.MySQL
Discuz.Mall
删除 Web 目录下 bin 目录的所有文件(除 Newtonsoft.Json.dll 之外,Discuz.Data.SqlServer 引用到了 Interop.SQLDMO.dll,如果要使 Discuz.Data.SqlServer 能通过编译,Interop.SQLDMO.dll 文件也不能删除,还是留着吧),生成 Web 项目。
把 Discuz.Data.SqlServer.dll 和 Discuz.Web.Admin.dll Copy 到 Web 的 bin 目录下,不要将这两项目引用到 Web 项目里!
接下来就是将 zq_Users 的用户导入论坛,将两个表的用户同步;如果用户数不多的话,可以在两边人工注册。同步好用户表后将同步注册、登录、更新用户资料程序更新上去!
至于注册、登录、更新资料的同步,做法如下:
主站这边:
添加一个扩展类 Extensions,对 User 类添加一个扩展方法(CreateUpdateBBSUser),用于向论坛用户表添加、修改、删除用户信息;然后只要在相应页面添加调用代码即可,如在注册时:
// 注册到论坛
user.CreateUpdateBBSUser(ActionType.Add);
添加调用的页面有:
/register.aspx.cs
/login.aspx.cs
/logout.aspx
/controls/userinfo.ascx
/user/my_baseinfo.aspx.cs
/admin/useradmin.aspx.cs(删除,以大林苑为例)
/admin/useraction.aspx.cs(编辑)
同步登录方面,从主站登录的,用 ajax 异步调用新增加登录论坛的页面(/aspx/1/loginuser.aspx),登录亦然(/aspx/1/logoutuser.aspx),页面代码如下:
// 代码:/aspx/1/loginuser.aspx
<%@ Page language="c#" AutoEventWireup="false" EnableViewState="false" %>
<%@ Import Namespace="Discuz.Common" %>
<%@ Import Namespace="Discuz.Forum" %>
<%@ Import Namespace="Discuz.Config" %>
<%
// 验证用户
int uid = Users.CheckPassword(DNTRequest.GetString("u"), DNTRequest.GetString("p"), true);
if (uid != -1)
{
//删除之前的错误登录信息
LoginLogs.DeleteLoginLog(DNTRequest.GetIP());
//根据积分公式刷新用户总积分
UserCredits.UpdateUserCredits(uid);
//写入用户登录后的cookie
ForumUtils.WriteUserCookie(uid, -1, GeneralConfigs.GetConfig().Passwordkey);
//更新该用户最后访问时间
Users.UpdateUserLastvisit(uid, DNTRequest.GetIP());
Statistics.ReSetStatisticsCache();
Response.Redirect("/");
}
%>
// 代码:/aspx/1/logoutuser.aspx
<%@ Page language="c#" AutoEventWireup="false" EnableViewState="false" %>
<%@ Import Namespace="Discuz.Common" %>
<%@ Import Namespace="Discuz.Forum" %>
<%@ Import Namespace="Discuz.Config" %>
<%
GeneralConfigInfo config = GeneralConfigs.GetConfig();
Discuz.Entity.OnlineUserInfo oluserinfo = OnlineUsers.UpdateInfo(config.Passwordkey, config.Onlinetimeout);
OnlineUsers.DeleteRows(oluserinfo.Olid);
ForumUtils.ClearUserCookie();
if (!DNTRequest.GetString("r").Equals(""))
Response.Redirect(DNTRequest.GetString("r"));
else
Response.Redirect("/");
%>
论坛这边:
首先将 Discuz.Web 项目的 .Net Framework 改为 3.5的,并添加 System.Xml.Linq 和 ZhengQuan.Framework 的引用。
论坛注册的,同样也是采用扩展类,添加一个扩展类(\UI\Extensions.cs),对 UserInfo 类添加一个扩展方法(CreateUpdateMainSiteUser),同样在注册修改等页面添加相应的调用代码即可。
论坛添加调用的文件有:
/aspx/1/register.aspx.cs 行279-280
/aspx/1/usercpprofile.aspx.cs 行185-188
/aspx/1/usercpnewpassword.aspx.cs 行74-76
论坛后台的暂时没考虑,因为考虑对用户操作一般在系统后台,有空再加上。
从论坛的登录和退出无和主站同步!
如果不用导入数据,至此,论坛的部署就到此结束。