Discuz用户分表后怎么通过uid获取用户信息的方法

2018-07-10 16:02 栏目:技术开发 查看(3106)

湖南幸运赛车爱彩人彩票网 www.schu9.cn 在前段时间湖南红网有一个需求,大概就是调用用户被置顶的帖子数排名的top10,测试的基本效果就是首先查询到top10的uid集合(由于功能??樵吹牡氖萁峁怪薪鲈谥枚ケ碇胁檠玫絬id的信息),最终效果如下(由于测试网站只有少部分数据,因此下面只显示5个):

1315

得到uid之后还需要得到用户相关的几个数据,包括头像、个人主页的url以及用户名;头像在discuz中可以使用avatar方法获取,个人主页的url通过uid直接拼装即可。而用户名则需要另外获取,可能有人会说直接使用DB类的fetch_first方法查询common_member表即可查到用户对应的用户名。

但一开始就有个前提,那就是网站的用户分表了,比如一般分表后会产生两个用户表,分别是common_member和common_member_archive,所以光查询前者肯定是不行的。其实阅读discuz的本身的源代码就可以发现,在很多地方他的做法都是通过判断用户是否在common_member中,如果存在则直接调用该值,否则需查询common_member_archive。如下是discuz本身的某个??榈脑创耄?/p>

153153

这样显然是可行的,但是通过C类发现并没有通过uid来查username的,只有通过username来查uid的,以上就是这样的。如果要用这种思路则需要这么来写:

31515

然而,实际上有更加简便的方式的

那就是通过uc来做处理,因为要的是用户名等uc中也保存了的信息,而且对于普通网站用户而言uc中保存的用户信息和dz中保存的用户信息是一致的。比如在discuz源代码中可以看到如下这样的方法:

35235

只要熟悉discuz开发的朋友都知道,看命名就可以顾名思义的,该方法是用于调取uc中的用户信息的。我们可以在uc_client/client.php找到该方法:

3535

然后可以在uc_client/control/user.php中找到该方法所调用的方法:

34535

也就是我们只需要在一开始的时候第二个参数传入1即可,也就是在该方法中会调用get_user_by_uid(),其中的参数其实是uid。然后我们可以在uc_client/model/user.php找到该方法:

3434343

这样就已经调取uc中的用户信息,需要注意的是,在上一步的onget_user方法中返回的时候并没有返回用户的所有信息,也不是返回带有uid、username、email等这些键值的数组。所以如果返回的是$user,如果需要取username的值,不能够写成$user['username']的。

至此,采用调用uc用户的方式通过discuz的用户uid获取的了用户的用户名。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:Discuz用户分表后怎么通过uid获取用户信息的方法 - 微构网络
分享:
  • 中央直属机关工委主要职责 2019-05-22
  • 打造“互联网+”,共享经济改变百姓生活 2019-04-22
  • 破财免灾!C罗愿向西班牙税务部门缴纳1880万欧元 2019-04-19
  • 中国品牌SUV新标杆 人民网试驾WEY VV7VV5 2019-04-19
  • 杨爱国:借助小博会促进尚志社会经济加快发展 2019-04-15
  • 泪目!川农院士逝世5年,夫人每日都去看他的雕像…思念如马,不停蹄! 2019-04-15
  • 海信世界杯首秀出奇招 竟打出俄文广告 2019-03-25
  • 财政部:对原产于美国的500亿美元进口商品加征关税 2019-03-11
  • 我和《人民日报》(我与人民日报·纪念人民日报创刊70周年) 2019-03-11
  • 杭州再增100个海绵城市项目 2018-11-08
  • 新华网申领新闻记者证资格审核公示 2018-11-08
  • 24| 131| 327| 651| 302| 268| 925| 582| 794| 402|