TPshop手机新模板的用户消息实现
今天在开发TPshop的手机新模板的消息页面,姑且记录一下。
首先,点击下方右上角,进入消息页面:
数据库中目前模拟了三条数据,有:
点击上图右上角,有:
这个 消息设置 功能是新增的,而且类型由原本的 系统通知 和 用户活动,拓展为下面六类。
实现这两个页面的功能之后,有效果如下:
点击取消 物流通知 和 我的资产,
退回 消息中心,有:
可见 我的资产 消息已经不显示了,而 用户活动 本来就没有,也没显示。
点击 消息设置 的 清空全部消息, 会把消息全部置为已读而没显示出来,并不会删除消息的数据,操作后自动跳到消息中心,结果如下:
上面功能比较简单,也把里面涉及到的主要代码片段摘出来,方便大家查看。
这个代码片段实现的是消息中心的展示内容:
主要注意点是要先查询关注的消息类型,筛选出未读的消息。
/**
* 获取用户的全部关注的消息
*/
public function getUserAllMaskMessage()
{
$this->checkPublicMessage();
$user_info = session('user');
$categorys = [];
for ($i = 0; $i < $this->message_category_num; $i++) {
if ($user_info['message_mask'] & (1 << $i)) {
$categorys[] = $i;
}
}
if (empty($categorys)) {
return [];
}
$user_system_message_no_read_where = array(
'user_id' => $user_info['user_id'],
'status' => 0,
'um.category' => ['in', $categorys]
);
$user_system_message_no_read = Db::name('user_message')
->alias('um')
->field('um.rec_id,um.user_id,um.category,um.message_id,um.status,m.send_time,m.type,m.message')
->join('__MESSAGE__ m','um.message_id = m.message_id','LEFT')
->where($user_system_message_no_read_where)
->select();
return $user_system_message_no_read;
}
这个实现的是设置关注的消息类型,因为点击按钮不需刷新整个页面,故用异步实现,节省存储空间,每个类型占用一个bit,下面对比特进行操作,暂时没想到更好更方便操作bit的方法。
public function ajax_set_notice()
{
switch (I('post.type')) {
case 'system':
$mask_offset = 0;
break;
case 'express':
$mask_offset = 1;
break;
case 'promotion':
$mask_offset = 2;
break;
case 'goods':
$mask_offset = 3;
break;
case 'asset':
$mask_offset = 4;
break;
case 'store':
$mask_offset = 5;
break;
default:
exit(json_encode(['status' => 1, 'msg' => 'no notice type']));
}
if (I('post.val')) {
$this->user['message_mask'] |= (1 << $mask_offset);
} else {
$this->user['message_mask'] &= ~(1 << $mask_offset);
}
M('users')->where('user_id', $this->user_id)->save(['message_mask' => $this->user['message_mask']]);
exit(json_encode(['status' => 0, 'msg' => '']));
}
-end-
TPshop手机新模板的用户消息实现的更多相关文章
- 个人博客制作如何选择前端模板 thinkcmf后台加载新模板 CSS js文件
我们的博客后台已经搭建好了,接下来我就要选择一个合适的模板做自己的博客,首先要定位你的博客是做什么用的,是属于什么行业,根据自己博客的定位选择适合的模板. 如果你是设计师,又会前端设计开发,那就可以自 ...
- Orchard之生成新模板
一:启用 Code Generation 进入后台, Modules –> Developer Enable 之. 二:生成模版 首先,进入 Orchard 命令行 在 CMD 下到达解决 ...
- [译][ABP vNext]ABP CLI,v0.18版本的新模板和其他功能
ABP CLI,v0.18版本的新模板和其他功能 ABP v0.18已发布, 包含解决的70+个issue,500+次提交 网站更改 abp.io网站完全更新以突出ABP框架的目标和重要功能.文档和博 ...
- discuz手机版模板开发
1.触屏版模板手机路径 discuz X3触屏版模板路径:/template/default/touch/forum/discuz.htm(主页面模板) discuz X3标准版模板路径:/templ ...
- 极光推送助推视频App,打造最活跃手机新媒体平台
移动应用能够帮助吸引更多的新用户,增加用户互动和对话.但你得让用户想起你,如何在一部手机上数十个App中脱颖而出,是考验App运营的关键之处.为了打造一个成功的App,开发者需要着眼长远,不应局限于其 ...
- 360手机新品牌5月6日公布 周鸿祎席地而坐谈AK47
今年年初,周鸿祎又做了一个艰难的决定,南下做手机!经过好一番折腾终于搞出点动静,奔驰S600L也卖了(炒作的味道很浓重),一款代号为AK47的产品被确认,就连邀请函也充分的体现了周鸿祎的老兵情节.最近 ...
- springboot 新模板 呵呵了
<html> <head> <title>批处理任务管理</title> <meta name="decorator" con ...
- Submline Text 3插件sublimeTmpl添加新模板
1.安装 一般安装Package Control 2.插件 添加模板 1).进入Preferences->Browse Packages->SublimeTmpl->template ...
- zabbix批量清理模板,添加新模板
import requests import json import sys def get_token(): data = { "jsonrpc": "2.0" ...
随机推荐
- Struts2(二)之封装请求正文、数据类型转换、数据验证
一.封装请求正文到对象中(重点) 1.1.静态参数封装 在struts.xml文件中,给动作类注入值,使用的是setter方法 1.2.动态参数封装 通过用户表单封装请求正文参数 1.2.1.动作类作 ...
- try{} catch(…){} 讨论(转)
以前都是用try{} catch(…){}来捕获C++中一些意想不到的异常, 今天看了Winhack的帖子才知道,这种方法在VC中其实是靠不住的.例如下面的代码: .try .{ .BYTE* pch ...
- suse安装svn服务端和客户端的使用
suse安装svn服务端 一. 安装服务端 配置网络安装源(suse11sp1为例) 新建11.1.repo11.1为软件源名称,可自定义文件并添加如下内容后保存 linux-e0xg:/etc/zy ...
- NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)
因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...
- 浅谈C10K问题
在大型的APP中进行高并发的访问,淘宝,支付宝,微信,QQ,等 C10K问题:高并发的进行访问 C10K问题的最大特点是:设计不够良好的程序,其性能和连接数及机器性能的关系往往 是非线性的.举个例子: ...
- Html5 Canvas笔记(3)-Canvas状态
p{ font-size: 15px; text-indent: 2em; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid ...
- JSAAS的Activiti会签开发扩展处理
1.什么是会签? 在流程业务管理中,任务是通常都是由一个人去处理的,而多个人同时处理一个任务,这种任务我们称之为会签任务.这种业务需求很常见,如一个请款单,领导审批环节中,就需要多个部门领导签字.在流 ...
- 玩转 SSH(一):使用 Struts 搭建简单站点
我们将使用 Struts 搭建一个简单的应用,当用户发送 HTTP 请求时,Action 类响应并设置返回信息,JSP 页面显示 Action 类中设置的信息. 首先,我们使用 Maven 的 mav ...
- 深入学习 DUBBO
1.什么是 RPC 协议? RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显 ...
- python 实例方法,类方法和静态方法
在学习python代码时,看到有的类的方法中第一参数是cls,有的是self,经过了解得知,python并没有对类中方法的第一个参数名字做限制,可以是self,也可以是cls,不过根据人们的惯用用法, ...