openid怎么登陆到帝国CMS

24 3 条评论

帝国CMS会员数据主表:

http://www.phome.net/doc/dbdoc/66/page/phome_enewsmember.html

字段名 类型 解释 附加说明
userid int(11) 用户ID
username varchar(30) 用户名
password varchar(32) 用户密码
rnd varchar(30) 随机认证码
email varchar(50) 联系邮箱
registertime datetime 注册时间
groupid smallint(6) 会员组ID
userfen int(11) 点数
userdate int(11) 有效期
money float(11,2) 金额
zgroupid smallint(6) 到期后转向会员组ID
havemsg tinyint(1) 是否有短信息 1为提示有短信息,0为不提示
checked tinyint(1) 是否审核 1为已审核,0为未审核
salt varchar(8) salt密码加密随机码

相关字段说明

涉及登陆的字段有username,password,rnd,salt,checked
username: 就是用户名不用说
rnd:是randomize的缩写,取得随机数的意思,记录中会员每登陆一次变一次,用这个随机数来判断当前登陆是否有效,用两个非IE内核浏览器登陆同一个会员,第一个登陆的被挤掉就是RND的效果。
checked:会员是否被审核
password,salt:共同用于密码会员密码验证

openid第一次连接帝国CMS 或者绑定帝国CMS账号

新浪微博,腾讯微博,QQ空间等等都会给一个openid,比如新浪微博的是weiboid,腾讯微博的是nickname,QQ空间给的是openid,无论第一次连接注册还是绑定原有帝国CMS账号都是绑定一个openid而已,所以在一般在帝国CMS主表新建一个字段用于储存openid;

以后的连接

以后的连接就简单了,获得返回的OPENID后搜索帝国CMS会员主表,如果有存在的OPENID就执行登陆,没有就执行注册或绑定,trylife用的登陆函数如下:openid已经是绑定的,所以函数更新下RND之后写COOKIE就可以;买过trylife插件的童鞋可以看下这个函数在,e\trylife/common/Dev/ecms-rd-common-functions.php

function ecms_memberlogin($userid)
{
	global $empire,$user_tablename,$public_r,$user_groupid,$user_username,$user_userid,$user_email,$user_password,$user_dopass,$user_rnd,$user_registertime,$user_register,$user_group,$user_saltnum,$user_salt,$user_seting,$forumgroupid,$registerurl,$dbtbpre,$user_regcookietime,$user_userfen,$user_checked,$level_r;
	$r=$empire->fetch1("select * from ".$user_tablename." where ".$user_userid."='$userid' limit 1");
	$rnd=make_password(12);
	$sql=$empire->query("update ".$user_tablename." set ".$user_rnd."='$rnd' where ".$user_userid."='$userid' ");
	$logincookie=0;
	$set1=esetcookie("mlusername",$r[$user_username],$logincookie);
	$set2=esetcookie("mluserid",$r[$user_userid],$logincookie);
	$set3=esetcookie("mlgroupid",$r[$user_group],$logincookie);
	$set4=esetcookie("mlrnd",$rnd,$logincookie);

	if( $set1 && $set2 && $set3 && $set4 )
	{
		$re=1;
	}
	else
	{
		$re=0;
	}

	return $re;
}

帝国CMS订单邮件提醒

20

e/class/ShopSysFun.php搜索代码 printerror($mess,$location,1);
在上一行加入如下代码:

		//trylife 订单信息发送管理员邮箱 [s] 1/1
		//此函数增加代码开始结束 无其他
		$email=array('94592590@qq.com');
		$subject='邮件标题';
		$content='邮件内容';   

		@include(ECMS_PATH.'e/class/SendEmail.inc.php');
		EcmsToSendMail($email,$subject,$content);
		//trylife 订单信息发送管理员邮箱 [e] 1/1

提高帝国CMS二次开发关联模型效率 高效利用帝国CMS关联字段

22 13°

帝国CMS关联字段应用简介

这个功能主要是为了两个或多个模型行数据间关系而产生的;例如音乐模型中的数据关系如下:
phome_ecms_singer(歌手数据表)
id //歌手ID
title //歌手名
text //歌手简介

phome_ecms_album(专辑数据表)
id//专辑ID
title //专辑名称
singer_id //歌手ID 这个歌手ID就是关联的 歌手数据表中的id字段

phome_ecms_music(专辑数据表)
id//歌曲ID
title //歌曲名称
singer_id //歌手ID 这个歌手ID就是关联的 歌手数据表中的id字段
album_id //专辑ID 这个专辑ID就是关联的 专辑数据表中的id字段
downpath //音乐地址

选择外表关联字段 与 下拉外表关联字段优缺点

使用帝国CMS关联字段有“选择外表关联字段”与“下拉外表关联字段”两种关联表单录入方式;
选择外表关联字段:弹出新页面选择要录入的值,优点是避免过多数据载入到表单页导致添加信息表单加载慢,别且可以搜索,缺点例如当我们要使用id作为录入字段,title作为显示字段的时候,再次修改表单带来了信息确认上的困难(使用id 等INT类型是因为查询的时候较为高效);
下拉外表关联字段:优缺点正好反过来……

关联字段的数据调用

灵动标签+SQL示例:专辑内容页调用所有专辑下歌曲

[e:loop={"select * from {$dbtbpre}ecms_music where album_id='$navinfor[id]' order by id desc",0,24,0,'',''}]
//这里是木板内容 内容页内的字段值可以使用$navinfor[字段]的方式获取
[/e:loop]

使用结合项:有关结合项可以看官方结合项解密

规避帝国CMS原有的管理字段缺点 使用AJAX效果

做的好点不仅可以规避原有管理字段的缺点而且还可以做到同页面录入关联模型信息,这个就不多说了(trylife的JS现在还是个白菜,有JS的问题可以问装B的凡姐 哈哈)截张近期项目的图;


这张图还少了一张游戏账号表


类似百度的搜索关键字下拉


游戏账号的无刷新录入和管理

帝国CMS添加信息成功后处理函数

21

帝国CMS本身已经具有字段处理函数,但是字段处理函数只能应用到添加信息入库前处理,信息入库后返回成功提示前处理就无能力为力了,但是这方面的处理又是很必须。

eg1:比方说trylife现在经手的《游戏发号》项目里有这么一个功能:帝国CMS发布文章同时发布到DiscuzX,领号用户需在DiscuzX更贴后才能领号;帝国CMS发布文章同时发布到DiscuzX这样的功能就需要在帝国CMS添加信息入库后于成功返回前进行操作,如果使用字段处理函数,文章因字段问题没有成功入库,因某些字段内容填写错误,发回错误提示,这样就及其有可能造成DX内错误信息;

eg2:再例如以trylife前有个《建材项目 》里,由于品牌和商品都是用户录入的,品牌可能存在也可能不存在,添加商品的时候录入品牌,这个时候就不能用字段处理函数,因有可能商品录入不成功而导致多余的品牌数据录入到库中,所以选择的是商品信息入库后,返回成功提示前处理;

简单的处理

以后台添加信息为例,简单说下添加信息处理
后台添加信息函数:AddNews($add,$userid,$username)
函数定义位置:e/class/hinfofun.php
简单的处理,我们只需要在AddNews()函数体内的下面代码上一行加入需要处理的代码即可
printerror("AddNewsSuccess","AddNews.php?enews=AddNews&ecmsnfrom=$add[ecmsnfrom]&bclassid=$add[bclassid]&classid=$add[classid]");

扩展下

上边的方法老是改系统文件,trylife个人认为比较烦,越改越多,臃肿的文件看着心里会烦;所以trylife在e/class/userfun.php定义了一个函数

//后台添加信息入库后与返回成功提示前处理函数
function AddNews_BeforeSucDo($add,$userid,$username)
{
//以后在这里添加处理
}

还是有更好的方法,待续……

//类似这样的问题,比如注册,前后台添加信息,评论,等都有必要存在入库前处理函数和入库后处理函数。
//整理好函数方面的建议,还是要给王猛老大发一份。
//上次给老大发了一份《帝国CMS方便拓展建议1-设置与缓存》这样个文档
//如果能采纳就方便多了哈

帝国CMS商城代码解析1 – 购物车cookie

02 12°

题外:
每天博客也没什么好写的,如果把一个系统用的透透彻彻那就是进步了,如果内部结构了解的透透彻彻了应该是成长了,如果是分析的透透彻彻那应该是上一个层次了,trylife现在做第二步,并向第三步骤发展;希望写出来的内容同样对大家有帮助,另外一系列的内容比较容易集中探讨问题,文章水平比较烂,有什么不足的地方请多指教,有什么要关于这个系列《帝国CMS购物车代码解析》要讨论我们可以在评论里讨论,当然有什么好问题更欢迎,本身博客要交换,更多是为浏览者而存在,也许你的问题就是下一篇博文呢。

帝国CMS商城前台相关文件

e/class/ShopSysFun.php 商城核心函数文件
e/ShopSys/buycar/index.php 商城购物车
e/ShopSys/order/index.php 订单信息填写页
e/ShopSys/SubmitOrder/index.php 订单确认提交页
e/ShopSys/ListDd/index.php 前台会员查看订单列表
e/ShopSys/ShowDd/index.php 前台会员查看订单详细

e/template/ShopSys/buycar.php 商城购物车模板
e/template/ShopSys/order.php 订单信息填写页模板
e/template/ShopSys/SubmitOrder.php 订单确认提交页模板
e/template/ShopSys/ListDd.php 前台会员查看订单列表模板
e/template/ShopSys/ShowDd.php 前台会员查看订单详细模板

增加订单入口链接

/e/enews/?enews=AddBuycar&classid=[!--classid--]&id=[!--id--]

增加订单函数

AddBuycar($classid,$id)
$classid 为栏目ID
$id 为文章ID

购物车cookie声明与读取

声明: SetBuycar($buycar) e/class/ShopSysFun.php
读取: $buycar=getcvar(‘mybuycar’);
帝国CMScookie操作函数查看《esetcookie() getcvar() -帝国CMS cookie 操作函数》

增加订单系统流程简介

1.从入口链接GET得到栏目ID和内容ID
2.判断信息在数据表中是否存在
3.设置购物车cookie
4.跳转购物车地址e/ShopSys/buycar/index.php
5.购物车(e/ShopSys/buycar/index.php)将会读取COOKIE分离后得到栏目ID,内容ID,购买数量

购车COOKIE格式

一种商品:|栏目ID,内容ID|购买数量!
二种商品:|栏目ID,内容ID|购买数量!|栏目ID,内容ID|购买数量!
三种商品:|栏目ID,内容ID|购买数量!|栏目ID,内容ID|购买数量!|栏目ID,内容ID|购买数量!
备注:查看购物车cookie可以在e/ShopSys/buycar/index.php中找到$buycar=getcvar(‘mybuycar’);修改为echo $buycar=getcvar(‘mybuycar’); 打开购物车就可以看到购物车COOKIE了

帝国CMS商城购物车 cookie开发示例:在购物车直接删除某件商品

分析:根据购物车COOKIE的格式,我们得到栏目ID,内容ID,购买数量(不一定是必须的),之后组合格式,删除COOKIE中的此段内容,重新打开购物车/或刷新购物车页面,这样就可以不用调整购物车,二直接删除某件商品;

要点:
1.需要一个PHP脚本页从用户删除商城COOKIE中删除提交的商品
2.为了直观方便体验好,还是使用AJAX效果(trylife使用的是JQuery),所以又下面2条
3.给购物车商品行加个ID格式为:product-栏目ID-信息ID-购买数量
3.商品行每行增加一个删除按钮
3.一个ajax函数用于处理删除动作

文件修改与增加:
修改文件:e/template/ShopSys/buycar.php 商城购物车模板
增加问津:e/trylife/ShopSys-demo/del-product.php 删除单个商品处理文件

最终效果截图:

示例下载与安装:
1.点击下载帝国CMS商城购物车 AJAX删除商品插件示例
2.解压后上传trylife目录到e目录
3.buycar.php上传覆盖到e/template/ShopSys/buycar.php 或对照修改

——————————————Exp.line———————————————
感谢凡姐关于JS的问题有问必答;各位朋友有关于帝国CMS商城的问题解析和本文的问题欢迎在本文下评论。《帝国CMS商城代码解析》下面的文章要写什么还是需要大家的方向标滴