Currently Browsing
代码学习
(转)uchome2.0的ajax技术流程研究心得跟大家分享
- 1 十二月 //
- Posted in 代码学习 //
- Tags : ajax uchome
- No Comment
原文地址:http://www.cnblogs.com/aiqunyou/archive/2009/09/21/1571004.html
很佩服这个作者,解说易懂,分析详细,特转载之。
语言编码:GBK
版权所属:身份信息网
支持网站:http://www.shenfen.info/
插件名称:ajax
插件作者:keete
适用版本:UCHome 2.0
前言:
基于uchomer的插件如果没有使用ajax或flex,可以说无论如何也做不到完美的。而相比于flex,ajax使用的较多。好多插件开发者在研究 uchome的ajax的使用过程中花费了不少时间,此文意在减少插件开发者的研究时间。flex相关插件的说明,敬请关注!
此文整理花了本同学4个小时以上的时间,如果版主觉得对大家有帮助,请加精!非常感谢:)
uchome模板全解析(二)——模板文件语法详解
- 1 十二月 //
- Posted in 代码学习 //
- Tags : uchome 模板 语法
- No Comment
本篇主要以几个例子来详细说明下uchome的模板文件结构及语法说明。
必须先来了解一下uchome的模板文件解析过程,我们以“随便看看”里的“博客”为例:
它的url地址是http://home.xxx.com/network.php?ac=blog,
那么我们先打开/network.php看一下,我们看到第25行有一段
//允许的方法
$acs = array(’space’, ‘doing’, ‘blog’, ‘album’, ‘mtag’, ‘thread’, ’share’);
$ac = (empty($_GET['ac']) || !in_array($_GET['ac'], $acs))?’index’:$_GET['ac'];
这里是保证不会出现其他不存在的模块。看到里面有个’blog’了吧。
然后又看到第37行里面有一段
//数据处理
include_once(S_ROOT.”./source/network_{$ac}.php”);
这个实际上引用了/source/network_blog.php文件,而network_blog.php里面进行相关的博客数据准备及其他操作,为下一步的解析模板做准备
uchome模板全解析(一)——系统模板文件功能说明
- 1 十二月 //
- Posted in 代码学习 //
- Tags : uchome 模板
- No Comment
本文分两部分:第一部分是uchome模板文件的功能说明,即每个模板页面分别表示哪个功能;所有内容均以uchome1.5版为准
第二部分是模板页面内使用的语法,用几个具体的例子来解释。
一. 原系统模板页面简介
uchome 1.5的系统模板页面主要在/templates/default目录下,命名大致分为以下几类:
- 以cp_开头的文件(主要是用户进行数据‘操作’的模板)
- 以do_开头的文件(注册、登陆等)
- 以network_开头的文件(主要‘显示’随便看看里面使用)
- 以space_开头的文件(主要用于‘显示’用户各类信息的模板)
- 单独文件(header、footer等)
- 样式表/templates/default/style.css
Continue Reading this Entry
discuz实现页面无刷新重发验证邮件功能
- 1 十二月 //
- Posted in 代码学习 //
- Tags : discuz 重发邮件 ajax
- No Comment
在开发的时候,我们论坛需要在用户注册的时候使用邮件验证。
老板要求模仿爱卡社区注册的时候的“重发验证邮件功能”,这个功能貌似在dz里面有个类似的“ [ 重新验证 Email 有效性]”功能(在发送完用户验证邮件后,用户可以在个人控制面板首页里看到)
所以具体的需求是:在注册页面第二步骤——发送完验证邮件并出现系统提示的时候,有个按钮,点击一下,就会再发送一封同样的邮件到用户的email地址,页面要实现无刷新……
仔细分析一下思路,列出涉及到的地方:
1.register.php 有几个相关变量:uid,username,email,idstring(这个就是验证邮件中激活地址最后几位,用于区别每个用户,非常重要),这些变量用于传递给重发邮件的后台代码
2.member.php 思路来源!里面有一段“elseif($action == ‘emailverify’)”的代码,就是系统“[重新验证Email有效性]”的实现过程
3.自己新建的一个resendmail.php文件,这里用的办法很笨,因为我的ajax技术很烂,只会get方式的,暂时只好把这个功能分离出来,用于重发邮件(接受uid,username,email,idstring变量),并且返回“成功”字样
4.自己新建的一个模板文件activity_email.htm,用于提示“已经发送邮件”,以及点击链接会再次发送的ajax处理。
5 当然了,仔细看global.func.php中的sendmail函数,以及include下的sendmail.inc.php,以及templages/default下的emai.lang.php也是很重要的,主要是看dz的唯一性激活链接是什么以及如何产生的
***********
整理一下dz的重发验证邮件处理流程,
1.用户提交注册信息的时候,得到uid,username,emai地址等,然后random(6)生成一个变量$idstring,用于组合成激活地址,类似
“http://localhost:8080/pkm/member.php?action=activate&uid=22&id=WpNLrk”
,将这段验证地址发送到用户的邮箱,同时在memberfields表里面的authstr字段写入 “时间戳+$idstring”,用于用户点击上面的激活地址的时候,匹配这个字段是否正确,如果正确则完成激活,这个$idstring,在register.php里产生。
2.如果用户点了控制面板中的“[重新验证email有效性]”,这里会激活member.php中的emailverify动作,这个动作里有判断,根据一个啥$type == 2来决定是否更新$idstring,并发送一个新的激活地址给用户。保证这个发送出去的地址中$idstring与数据库中新产生的$idstring同时更新并能匹配。
OK,我们这里就是要取一个中间方案,我们的重发验证邮件功能重点在于“重发”,即表示每次点击“重发”按钮,发送的激活地址都与注册第一步系统自动发的激活地址是一模一样的,最关键就是这个idstring要相同。
还是承认我很笨,我使用的还是将uid,username,email地址,idstring都通过url地址传递的方法。
具体实现过程如下:
1.修改register.php,找到“switch($regverify)”,将“case 1”的“showmessage(”profile_email_verify”);”改成“include template(’activity_email’);”,表示跳到下一步要说的那个模板页面activity_email.htm。
2.新建模板文件/templages/default/activity_email.htm,内容如下
{subtemplate header}
$bbname » {lang register}{lang register_activation}
验证邮件发送发送成功!onclick=”resendmail()”>重发邮件
<div id=”resendmailstatus“>
{subtemplate footer}
前面一大段是ajax代码,用于将uid,username,email,idstring传递到下一步说的后台代码,有个链接,onclick动作就是resendmail,然后还有一个层”id=resendmail”,用于接收发邮件返回的状态(哈哈,实际上我没有判断是否发送成功,因为对方网络、服务器等原因,这是没法知道对方是否能收到的,不管怎样,点一次,就显示一次“成功”)
3.最重要的也是最简单的——重新发送邮件,根目录下新建一个resendmail.php,里面很多代码都是从member.php的emailverify动作里拷过来的,内容如下
require_once ‘include/common.inc.php’;//包含进了sendmail等重要函数
if($_GET['username']){
$idstring = $_GET['idstring'];
sendmail(”$_GET[username] <$_GET[email]>”, ‘email_verify_subject’, ‘email_verify_message’);
echo ’success!’;
} else {
echo ‘failure!’;
}
?>
好了,测试吧,提交资料后,跳到可以重发邮件的页面,猛点“重发”链接,邮箱就会收到很多封激活邮件,而且这些激活地址都是一模一样的,其实我们完全可以修改最后一步的重发邮件功能,使这里idstring重新产生,同时修改数据库memberfield中的authstr字段,也可以保证 idstring的匹配,但是时间紧迫,还是少些点代码多陪陪老婆吧,啊哈哈。


