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" ...
 
随机推荐
- iOS开发之Segue
			
Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue). 每一个Segue对象,都有3个属性: (1)唯一标识 @property (nonat ...
 - Python快速入门(4)
			
输入输出: open() read() readine() readlines() write() pickle模块可以做序列化操作,持久保持对象的信息. 我们可以很容易的读写文件中的字符串.数值就要 ...
 - selenium自动化--(JAVA方法写的)第一章 源代码工程的导入
			
1.首先打开eclipse,找到eclipse的工程窗口界面,依次找到"import-->import"功能 2.在弹出来的导入对话框中,选择导入已存在的工程"Ex ...
 - Redis应用----消息传递
			
1.摘要 消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的.常见的消息传递应用有,新浪微博中的@我呀.给你评论然后的提示呀.赞赞赞提示.私信呀.甚至是发微博分享的新鲜事:知乎中的私 ...
 - Ant.SOA微服务框架开源
			
开源地址:https://github.com/yuzd/AntServiceStack 框架特色0.Service Management(服务治理) 1.CodeGen Contract Fir ...
 - 车大棒浅谈jQuery源码(二)
			
前言 本来只是一个自己学习jQuery笔记的简单分享,没想到获得这么多人赏识.我自己也是傻呵呵的一脸迷茫,感觉到受宠若惊. 不过还是有人向批判我的文章说,这是基本知识点,完全跟jQuery源码沾不上边 ...
 - 深入hibernate的三种状态
			
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
 - STM32驱动OV7725摄像头颜色识别
			
实验目的: 使用stm32驱动OV7725摄像头进行图像实时采集,在tft屏幕上实时显示并识别图像中的特定颜色,在颜色的周围画上框. 实验现象: 我的工程代码链接: http://download.c ...
 - 分享一个低配VPS下运行的mysql配置文件
			
在各种内存CPU核心只有1/2核,内存只有512M/1G的vps下,内存.CPU.硬盘都不是太充裕.因此主要思路是,禁止吃内存大户innodb引擎,默认使用MyISAM.禁止吃硬盘大户log-bin, ...
 - Android 开发之错误整理 [2014-04-28 09:22:28 - XXXX] Unable to resolve target 'android-18'
			
在开发的时候难免会导入项目,那么怎么经常会遇到这个错误: [2014-04-28 09:22:28 - XXXX] Unable to resolve target 'android-18' targ ...