最近做了一个dede二次开发的小项目,这也算是我真真第一次接触dede,之前有听说过其强大和灵活性,但一直没有去亲身去了解!项目的时间大概用了3天左右,简单的说也就是一个做了一个小站而已!期间通过看百度文库自己写了一个活动招募的插件,dede的插件确实非常简单(至少相对于一般discuz插件来说),而且流程也特别的清晰!不过说这么多,我还是只能作为新手的层面来表述,说的不好、不对望大神们原谅!
说完了没用的,就说一下重点吧。因为这个项目比较小,当时提供模板的时候没有想到做登录和注册的模板同时要做到和discuz之间的通信,我也安装uc和discuz并做了两个应用之间的通信。但问题还是出来了,因为两个应用通信只是单纯的实现了,同步登陆和退出。具体的登录和注册还是要分开进行的,模板是独立开的!
我的目的很简单,就是在cms的首页放上discuz的登陆框,并且登录和注册都去discuz完成然后返回登录状态,这样就可以免去安装uc,以及设置通信、同时还能满足同步登陆、同步退出,大大的提高用户体验!
我的具体做法步骤很简单:
第一、在discuz的根目录新建文件 discuz_denglu.php 这个文件用来调用discuz的核心类,因为class_core.php文件里面有限制,不允许在discuz外部调用该类,所以为了保持核心文件的完整性、原始性我们选择在discuz根目录建新文件用来调用核心类!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php //调用discuz公共执行类等核心代码 begin require './source/class/class_core.php'; $discuz = & discuz_core::instance(); $discuz->init(); //调用discuz公共执行类等核心代码 end if($_GET['action'] == 'login'){ if (empty($_G['uid'])) { echo '1'; } else { echo '您好,尊贵的会员 <strong><span style="text-decoration: underline;">'.$_G['username'].'</span> '.'<a href="http://www.xxx.com/bbs/home.php?mod=space&uid='.$_G['uid'].'&do=index&view='.$_G['username'].'">我的地盘</a> <a href="http://www.xxx.com/bbs/home.php?mod=space&do=home">最新动态</a> <a href="http://www.xxx.com/bbs/member.php?mod=logging&action=logout&fromhash='.FROMHASH.'">退出登录</a>'; } } ?> |
从该文件代码我们不难看出,这几句代码就可以实现discuz登录和未登录状态。同时可以在文件里使用discuz的所有全局变量。
看到这里大家是不是就可以看出我下部要做什么了,因为我的最终目的是实现在模板显示登录和未登录两种状态,这种情况下我们肯定会果断选择通过ajax来实现其效果,这样才能做到完美无缺。
贴一下模板代码(js):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <script type="text/javascript"> $(window).load(function(){ $.ajax({ url:'http://www.xxx.com/bbs/discuz_denglu.php?action=login', type:'GET', cache:false, success:function(msg) { if(msg == 1) { $('#lsform').show(); $('#logging').hide(); } else { $('#lsform').hide(); $('#logging').show(); $('#logging').html(msg); } } }); }); </script> |
cms首页html代码:
1 2 3 4 5 6 | <form id="lsform" class="legReg" style="display: none;" action="http://www.xxx.com.cn/bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes" method="post" onsubmit="return lsSubmit();">用户名:<input class="inputSty" type="text" name="username" /> 密码:<input class="inputSty" type="password" name="password" /> <input class="submitBtn" type="submit" value="提交" /> <a class="reg" href="http://www.xxx.com/bbs/member.php?mod=register"><img src="{dede:global.cfg_templets_skin/}/images/btn.jpg" alt="立即注册" width="64" height="21" /></a> </form> <p style="display:none; margin-left:100px;" id="logging"></p> |
第二种解决方式(解决跨域调用):
修改上面的discuz_denglu.php文件为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php //调用discuz公共执行类等核心代码 begin require './source/class/class_core.php'; $discuz = & discuz_core::instance(); $discuz->init(); //调用discuz公共执行类等核心代码 end if (empty($_G['uid'])) { //这里做一下修改 echo '<form id="lsform" class="legReg" style="display: none;" action="http://www.xxx.com.cn/bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes" method="post" onsubmit="return lsSubmit();">用户名:<input class="inputSty" type="text" name="username" /> 密码:<input class="inputSty" type="password" name="password" /> <input class="submitBtn" type="submit" value="提交" /> <a class="reg" href="http://www.xxx.com/bbs/member.php?mod=register"><img src="{dede:global.cfg_templets_skin/}/images/btn.jpg" alt="立即注册" width="64" height="21" /></a> </form>'; } else { echo '您好,尊贵的会员 <strong><span style="text-decoration: underline;">'.$_G['username'].'</span></strong> '.'<a href="http://www.xxx.com/bbs/home.php?mod=space&uid='.$_G['uid'].'&do=index&view='.$_G['username'].'">我的地盘</a> <a href="http://www.xxx.com/bbs/home.php?mod=space&do=home">最新动态</a> <a href="http://www.xxx.com/bbs/member.php?mod=logging&action=logout&fromhash='.FROMHASH.'">退出登录</a>'; } ?> |
通过以上修改,我们如果需要在页面调用可以直接在html页面加入
1 | <iframe src="http://bbs.xxx.com/discuz_denglu.php"></iframe> |
iframe的属性自己定制就可以,以下是iframe的基本用法。
iframe可选的属性
属性 | 值 | 描述 | DTD |
---|---|---|---|
align |
|
不赞成使用。请使用样式代替。
规定如何根据周围的元素来对齐此框架。 |
TF |
frameborder |
|
规定是否显示框架周围的边框。 | TF |
height |
|
规定 iframe 的高度。 | TF |
longdesc | URL | 规定一个页面,该页面包含了有关 iframe 的较长描述。 | TF |
marginheight | pixels | 定义 iframe 的顶部和底部的边距。 | TF |
marginwidth | pixels | 定义 iframe 的左侧和右侧的边距。 | TF |
name | frame_name | 规定 iframe 的名称。 | TF |
scrolling |
|
规定是否在 iframe 中显示滚动条。 | TF |
src | URL | 规定在 iframe 中显示的文档的 URL。 | TF |
width |
|
定义 iframe 的宽度。 | TF |
以上就是我的解决方式,这样我们就可以非常轻松的解决这个问题。
如果有说的不好、不明白的地方,请高手指点!!
手机贷贷款邀请码:http://xumeinv.com RA9FCV ,借钱、贷款、信用卡贷款,额度灵活到账快!
同步登陆和退出实现了,不错。趣头条:http://www.qutoutiaow.com
退出登陆有问题,地址应改为:member.php?mod=logging&action=logout&formhash=’.FORMHASH.’
不好用啊,空白页面。是不是ajax有问题? $(‘#loggong’).hide();应该是 $(‘#logging’).hide();吧???改完还不好用!
你好,谢谢反应的问题,我看一下。我不知道你现在是什么问题,我帮你看下~~~
你检查下 你是不是没有调用jquery.js文件,如果没有调用jquery的话ajax肯定是无效的啊!
jquery调用了,版本也换了一下测试,都不行。discuz_denglu.php?action=login没有问题,正常判断。
哦,这样子的。能否页面提供一下,我帮你看看吧!
我QQ 568125xxx 你可以QQ联系我!
加你了 ,麻烦你
已添加第二种调用方式,希望对你有用!
这个适合整合的时候使用!
嗯,是的。但是相对于uc整合来说无疑是比较简单的方法了!