今天在开发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手机新模板的用户消息实现的更多相关文章

  1. 个人博客制作如何选择前端模板 thinkcmf后台加载新模板 CSS js文件

    我们的博客后台已经搭建好了,接下来我就要选择一个合适的模板做自己的博客,首先要定位你的博客是做什么用的,是属于什么行业,根据自己博客的定位选择适合的模板. 如果你是设计师,又会前端设计开发,那就可以自 ...

  2. Orchard之生成新模板

    一:启用 Code Generation 进入后台, Modules –>  Developer Enable 之.   二:生成模版 首先,进入 Orchard 命令行 在 CMD 下到达解决 ...

  3. [译][ABP vNext]ABP CLI,v0.18版本的新模板和其他功能

    ABP CLI,v0.18版本的新模板和其他功能 ABP v0.18已发布, 包含解决的70+个issue,500+次提交 网站更改 abp.io网站完全更新以突出ABP框架的目标和重要功能.文档和博 ...

  4. discuz手机版模板开发

    1.触屏版模板手机路径 discuz X3触屏版模板路径:/template/default/touch/forum/discuz.htm(主页面模板) discuz X3标准版模板路径:/templ ...

  5. 极光推送助推视频App,打造最活跃手机新媒体平台

    移动应用能够帮助吸引更多的新用户,增加用户互动和对话.但你得让用户想起你,如何在一部手机上数十个App中脱颖而出,是考验App运营的关键之处.为了打造一个成功的App,开发者需要着眼长远,不应局限于其 ...

  6. 360手机新品牌5月6日公布 周鸿祎席地而坐谈AK47

    今年年初,周鸿祎又做了一个艰难的决定,南下做手机!经过好一番折腾终于搞出点动静,奔驰S600L也卖了(炒作的味道很浓重),一款代号为AK47的产品被确认,就连邀请函也充分的体现了周鸿祎的老兵情节.最近 ...

  7. springboot 新模板 呵呵了

    <html> <head> <title>批处理任务管理</title> <meta name="decorator" con ...

  8. Submline Text 3插件sublimeTmpl添加新模板

    1.安装 一般安装Package Control 2.插件 添加模板 1).进入Preferences->Browse Packages->SublimeTmpl->template ...

  9. zabbix批量清理模板,添加新模板

    import requests import json import sys def get_token(): data = { "jsonrpc": "2.0" ...

随机推荐

  1. [译]Selenium Python文档:五、Waits等待

    大多数现代web应用都使用了AJAX技术.当浏览器加载一个页面的时候,该页面内的元素可能在不用的时间间隔内进行加载.这使得元素定位变得比较困难:如果一个元素还没有出现在DOM中,定位函数将会抛出一个E ...

  2. 【PHP实现】高效使用印象笔记之命令行快速保存

    一.功能 脑袋中冒出一个想法时,命令行(Terminal)中输入一条命令快速保存到Evernote. 注:这里适用于保存简短的内容 不喜欢听絮叨的,直接文末找Github地址吧. 二.想法来源 一直使 ...

  3. [LeetCode] Range Sum Query - Mutable 题解

    题目 题目 思路 一看就是单点更新和区间求和,故用线段树做. 一开始没搞清楚,题目给定的i是从0开始还是从1开始,还以为是从1开始,导致后面把下标都改掉了,还有用区间更新的代码去实现单点更新,虽然两者 ...

  4. Android-自定义控件之时针-霞辉

    注释已经比较详细了,废话就不多说了.贴代码了 时针分针秒钟都做上去了,采用的方法也很简单,仔细看一会就能看懂 自定义View类 package com.xh.mytime; import java.u ...

  5. git 远程仓库管理

    要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某 个项目时,需要管理这些远程仓库 ...

  6. ubuntu-terminal快捷键

    常用快捷键功能:Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+k 删除此处至末尾的所有内容 Ctrl+u 删除此处至开始的所有内容 Ctrl+d 删除当 ...

  7. 更全面的聊聊PRINCE2是什么

    1 什么是PRINCE2®? PRINCE2是一个非专有方法,已在全世界超过150个国家广泛使用,采用它的组织正在与日俱增. 它被广泛认为是项目管理的领先方法,超过2万个组织已经从其开创性的可信方法中 ...

  8. python之pymysql模块学习(待完善...)

    pymysql介绍 pymysql是在python3.x版本中用于连接mysql服务器的一个库.python2中则使用mysqldb. 安装方法: pip install pymysql 使用实例: ...

  9. Docker系列一之基础快速入门企业实战

    1.1什么是LXC LXC为Linux Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚 ...

  10. Visual Studio Code 使用Chrome Debug 代码

    一.添加插件 Debugger for Chrome,点击安装,安装完成之后,启动 二.配置启动参数 1.按 F5,出现界面如图,选择 Chrome 2.然后会打开配置文件 launch.json 3 ...