ThinkPHP + Discuz 整合方法
ThinkPHP + Discuz 整合方法
以下是Discuz6的整合方法,discuz5请按照里面的说明进行相应的修改,也可以使用了。
1.在项目的action目录下信件PublicAction.class.php。这样写:
代码: 复制内容到剪贴板
class PublicAction extends Action
{
function login()
{
$this->display();
if(!isset($_SESSIONC('USER_AUTH_KEY'))||$_SESSIONC('USER_AUTH_KEY')==0) {
$this->display();
return ;
}else {
redirect(__APP__);
}
}
function index()
{
//如果通过认证跳转到首页
redirect(__APP__);
}
function checkLogin()
{
// 这里使用用户名、密码和状态的方式进行认证。这里是discuz6.1,discuz5的加密方式不一样。用discuz5的话你需要修改下面这一句。
//注意!!!这里直接把$_POST['name']和$_POST['password']放到查询语句中是不安全的。请先进行处理!我是自己处理的,这里没有贴。我在找ThinkPHP中的处理函数,还没有找到。
$authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
if(false === $authInfo) {
echo '登录失败,请检查用户名和密码是否有误!';
}else {
// 设置认证识别号
session_register(C('USER_AUTH_KEY'));
session_register('loginid');
$_SESSION[C('USER_AUTH_KEY')] = $authInfo["uid"]; // 这里用户表的id字段
$_SESSION["loginid"] = $authInfo["username"];// 这里用户表的用户名字段
//获取并保存用户访问权限列表
RBAC::saveAccessList();
dump($_SESSION);
echo strtoupper(APP_NAME)." ".strtoupper(MODULE_NAME)." ".strtoupper(ACTION_NAME);
}
}
}
2.然后在模板中新增登陆模板,路径为Tpl/default/Public/Login.html这里把官方教程中的模板贴出来,省的再去找了:
代码: 复制内容到剪贴板
<body>
<form method=post name="login" id="form1" action="__URL__/checkLogin">
<div class="tcenter hmargin">
<table id="checklist" class="login shadow" cellpadding=0 cellspacing=0 >
<tr><td height="5" colspan="2" class="toptd" ></td></tr>
<tr class="row" ><th colspan="2" class="tcenter space"> 系统管理登录 </th></tr>
<tr><td height="5" colspan="2" class="toptd" ></td></tr>
<tr class="row" ><td colspan="2" class="tcenter"><div id="result" class="result none"></div></td></tr>
<tr class="row" ><td class="tright" width="25%">帐 号:</td><td><input type="text" class="medium bleftrequire" check="require" warning="请输入帐号" name="name"></td></tr>
<tr class="row" ><td class="tright">密 码:</td><td><input type="password" class="medium bleftrequire" check="require" warning="请输入密码" name="password"></td></tr>
<tr class="row" ><td class="tcenter" align="justify" colspan="2">
<input type="button" value="刷 新" onclick="fleshverify()" class="submit small"><input type="submit" value="登 录" class="submit small hmargin">
<input type="reset" value="重 置" class="submit small">
</td></tr>
<tr><td height="5" colspan="2" class="bottomtd" ></td></tr>
</table>
</div>
</form>
</body>
3.在Model目录中新增一个UserModel.class.php
代码如下:
代码: 复制内容到剪贴板
class UserModel extends Model
{
protected $trueTableName = 'uc_members';//这里是ucenter的用户表的表名。如果你在uc中修改了前缀,就把表名的uc部分修改成自己的。
}
4.可以了进行登录了。就这些。昨天看ThinkPHP的文档看了一整天。TP不是一般的强大啊。个人感觉比FLEAPHP强很多。
如果你使用的是discuz5版本,由于没有ucenter,需要修改两个部分。
一是 PublicAction.class.php中的
$authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
二是 UserModel.class.php 中的'uc_members'改成相应数据表。
5. 下载RBAC。
在使用中除了上面的还不够。还要进行RBAC赋权的操作。这里你需要下载一个官方的RBAC示例,推荐放在和你的程序平级的目录。
6.修改RBAC
Model下的UserModel.class.php内容是下面的代码。这个和前面的UserModel.class.php一致。可以直接复制过来
代码: 复制内容到剪贴板
class UserModel extends Model
{
var $trueTableName='uc_members';
}
还要修改GroupAction.class.php中的function user()
代码如下:
代码: 复制内容到剪贴板
function user()
{
//读取系统的用户列表
//以下三句请根据实际情况进行修改
$userDao = D("User");
$list = $userDao->findAll('','uid,username');//我们修改了这里
$userList = $userDao->getCols($list,'uid,username');//还有这里,其他的不要动了。
$groupDao = D("Group");
$list = $groupDao->findAll('','id,name');
$groupList = $groupDao->getCols($list,'id,name');
$this->assign("groupList",$groupList);
//获取当前用户组信息
$groupId = isset($_GET['id'])?$_GET['id']:'';
$groupUserList = array();
if(!empty($groupId)) {
$this->assign("selectGroupId",$groupId);
//获取当前组的用户列表
$list = $groupDao->getGroupUserList($groupId);
$groupUserList = $groupDao->getCols($list,'id,id');
}
//$userList = array_diff_key($userList,$groupUserList);
$this->assign('groupUserList',$groupUserList);
$this->assign('userList',$userList);
$this->display();
return;
}
7.现在可以进行分组操作了。
ThinkPHP + Discuz 整合方法的更多相关文章
- 织梦系统与discuz论坛整合方法
如何完成dedecms模板系统与discuz论坛整合呢? 这里的整合指会员信息,会员登陆.退出的同步:论坛信息的引用:等等. 首先,我们先来安装织梦(dedecms)系统. 然后,我们在网站根目录下建 ...
- ThinkPHP框架整合phpqrcode生成二维码DEMO
ThinkPHP框架发展到今天功能已经变得是非常强大了,但是ThinkPHP框架中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能.想使用phpqrcode首先就要把p ...
- spring与mybatis三种整合方法
spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...
- ThinkPHP的field方法的用法总结
ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段,下面详细道来. .用于查询 在查询操作中field方法是使用最频繁的. $Model- ...
- thinkphp的field方法的用法
ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model->fi ...
- 2016北京PHP39期 ThinkPHP Discuz Dedecms 微信开发视频教程
2016北京PHP39期 ThinkPHP Discuz Dedecms 微信开发视频教程 所有项目均带有软件,笔记,视频,源码 日期 课程(空内容代表放假) 2015/7/10 星期五 开学典礼 ...
- thinkphp中field方法
hinkPHP的CURD操作中有很多非常实用的方法,从这篇开始,我们会为大家一一介绍. 首先为大家介绍下field方法的用法.field属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段, ...
- thinkphp中limit方法
limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 用法 限制结果数量 例如获取满足 ...
- Struts2+hibernate3+Spring2的整合方法
浅谈Struts+hibernate+Spring的整合方法 摘要:本文将介绍Struts,Spring与hibernate的集成.希望大家能从中受用. 1.在工程中导入spring支持,导入的Jar ...
随机推荐
- Oracle数据库备份与恢复
第一章. 理解什么是数据库恢复 当 我们使用一个数据库时,总希望数据库的内容是可靠的.正确的,但由于计算机系统的故障(硬件故障.软件故障.网络故障.进程故障和系统故障)影响数据库系 统的操作,影响数据 ...
- 一块神奇的树莓派电子板竟让我学会了Linux系统
树莓派(Raspberry Pi)是基于ARM的微型电脑主板,外形只有信用卡大小,因此也被称为新型卡片式电脑,树莓派具有电脑的所有基本功能,可谓麻雀虽小五脏俱全.而其开发组织Raspberry Pi ...
- 最大流 总结&&做题记录
最近一直很忙,为了节省时间,从今以后的题解会 一个专题 写一篇. 刷了一些题后,有了以下总结: 模型要点: 1.构造流量平衡,在满足流量平衡的情况下,找到要让什么最大. 2.一般用于判断性问题,即所有 ...
- IIS调试技巧
VS2010如何调试IIS上的网站 通常,我们在Visual Studio里调试ASP.NET网站,都是加个断点,然后按F5,在VS自带的虚拟服务器下调试的.但有时候,VS自带的服务器弱爆了,无法满足 ...
- 在可以调用OLE之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute
导入导出功能,在调用ShowDialog时的错误,解决办法如下: WinForm窗体的入口点: /// <summary> /// 应用程序的主入口点. /// </summary& ...
- 《final修饰基本类型变量和引用类型变量的区别》
//final修饰基本类型变量和引用类型变量的区别 import java.util.Arrays; class Person { private int age; public Person(){} ...
- 《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案
2.1 int,long long ,short 可表示范围和占用内存空间不同.具体与计算机有关. 无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数. float是单精度,一般占用4个字节 ...
- Activity 和 生命周期: 创建
了解了整体的android创建流程之后,就分析一下到底这个过程中做了什么? activity创建中开始时由activityStack中的realstartActivityLocked函数中调用了act ...
- C和Objective-C的语法概要
C语言的三个基本要素是数据.语句和函数,支持面向过程编程(POP). C语言有数据,数据分为常量和变量,数据的类型分为字符类型和数字类型,数字类型分为整数类型和浮点数类型,复合数据的类型有数组和结构, ...
- 68. 蓄水池抽样(Reservoir Sampling)
[本文链接] http://www.cnblogs.com/hellogiser/p/reservoir-sampling.html 问题起源于编程珠玑Column 12中的题目10,其描述如下: H ...