• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

TP5 商城(六)邮件找回密码、QQ 互联、QQ 登录、分类列表页的面包屑导航、分类列表页左侧分类菜单

Mr.Lee 由 Mr.Lee
2018年6月17日
在 TP5.0, TP5.0商城, 后台框架
0
TP5 商城(一)环境部署、数据表、后台首页、用户 CURD、Ajax 状态切换、后台登录、后台退出、后台防翻墙、RBAC
0
分享
0
浏览

商城第六天

一、邮件技术实现密码找回

1、邮件发送概述

(1)邮件发送的原理

 

解释:

POP3:全名为“Post Office Protocol – Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件,提供了SSL加密。

简单一句话,POP服务器是用来收信的。

(2)SMTP协议(Simple Mail Transfer Protocol)

SMTP(Simple Mail Transfer Protocol):

即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。

通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

简单的说: SMTP则是负责邮件服务器与邮件服务器之间的寄信的通讯协定(类似于http协议)

2、如何实现邮件的发送

(1)需要有邮件发送的第三方程序包,比如可以使用开源免费的PHPMailer

(2)需要邮件服务器

利用互联网上的第三方免费邮件服务器,例如 163, qq等,有些大公司会自己搭建邮件服务器。

(3)需要在免费的邮件服务器里面(可以去注册163的),注册一个邮箱,进入邮箱后,要开通smtp服务。

以163为例,先注册一个邮箱账号。

注册成功然后登录进入用户设置

开通smtp服务

设置客户端授权密码

(4) php.ini配置文件中需要启用sockets扩展。

记得重启apache服务器

3、邮件发送案例

参考以下示例:

集成到项目中实现忘记密码功能

  1. 把上面测试通过的发送邮件的sendEmail复制到[应用目录]/extend目录中

注:测试的时候,记得修改demo.php中的基本配置。

  1. 在common.php文件中封装一个发送邮件的方法sendEmail

  1. 记得测试一下是否ok

实现登录的忘记密码功能

找回密码的基本流程图解:

  1. 修改登录页面的忘记密码的链接地址

  1. 在home-publicController-findpassword方法,展示一个输入注册时候的邮箱的模板显示。

注:模板可以直接复制登录的login.html模板即可,稍做修改

效果:

  1. 给上面的按钮绑定单击事件,进行发送ajax,触发发送邮件。

  1. 在home模块的PublicController控制器中的findPassword方法中判断是否是ajax请求,接收重置的邮箱,进行一些发送邮件前的判断

  1. 当输入的邮箱在系统中存在的时候,就进行发送邮件。

需要把修改密码的链接地址构造起来一个a标签,发送给邮箱的用户:

类似于: php15商城– <a href=”http://域名/修改密码的新地址”>点我找回密码</a>

获取当前网站的请求协议和域名:

发送成功或失败,在html静态页面给出对应的提示:

注:上面提示layer.msg需要引入layer弹出层插件

邮件收到的地址如下:

  1. 建立一个修改密码的方法updpassword。

模板内容如下:

  1. 给上面的id=updPassword绑定单击事件,发送ajax请求,修改密码

注:上面模板也要引入layer弹出层插件

  1. 在updpassword中判断是否是ajax请求,完成修改用户的密码

同时在Memer模型的编辑的前钩子中完成密码的加密:

验证邮件地址的合法性

  1. 因为用户可以篡改邮件的链接地址,如把id=1的用户改为id=3的用于,这样就把其他用户的密码给修改了
  2. 还要保证链接地址有个有效期比如1天。

具体做法:

  1. 在发送邮件的时候,给携带携带3个参数,member_id、time、加密的字符串。

加密的字符串是member_id和time和我们配置中一个配置项加密的结果。

邮件地址生成的a链接地址如下:

http://www.php15shop.com/home/public/updpassword/member_id/2/time/1529202630/hash/50730d397f3b07e62e52e4c5b5e1cf47

  1. 在更新密码的updPassword方法中,判断邮件地址是否被篡改,且要在指定的有效期内

以后凡是防止用户篡改表单或者url中的参数,解决办法:加密后对比处理。

二、QQ互联

1、注册QQ互联应用

先去腾讯开发平台注册账号:http://open.qq.com/ 。

等资料审核通过后便可去qq互联创建应用: https://connect.qq.com/manage.html#/ ,创建好如下所示。

点击上面的查看,进入以下页面:

回调域设置:

注意:

  1. 上面的应用虽然审核不通过,但是不影响我们使用。我们只需要获取应用的appid和key即可。
  2. 只有网站备案通过,应用才可以审核通过,没通过审核的应用只能使用我们所注册的qq号进行登录测试,审核通过后就没限制。
  3. 当我们本地网站集成qq登录时,本地域名回调地址域需要和上面应用设置的一样。

注意:

当应用创建好之后,立刻记住appid和appkey ,设置好和我们本地网站域名一样的回调域和回调地址。

2、下载QQ登录PHP-SDK 集成包

下载地址:http://wiki.connect.qq.com/

下载php版本:

下载下来如下所示:

进行QQ登录前的参数配置

1、把qq登录开发包SDK中的以下目录复制到网站根目录下,即[应用目录]/public/中

  1. 直接在浏览器中访问connect2.1目录中即可

点击上面的设置配置项。

进入如下:

点击上面的example,,点击qq登录登录的logo图标,如果能够有一个qq登录的弹框说明配置成功

注意:我们应用中的域名如果备案审核通过,则只能用我们所注册的qq进行登录测试

用注册的qq登录成功之后,会进入到我们之前所设置的callback回调地址

分析如何唤起QQ登录弹框

分析qq图标的logo按钮

再去对应的文件中查看toQzoneLogin()事件:

可见事件在一个新窗口打开oauth 中的index.php。找到此文件

可见,以上3行代码最终唤起qq登录弹框!。后面在项目中,点击qq登录的logo图标执行这三行代码即可完成qq登录弹框。

5、集成到项目中实现QQ登录

qq登录流程图:

1、点击qq登录的图片,唤起qq登录弹框

  1. 把之前测好的API目录复制到extend/qqLogin/目录下面

注:如果之前的配置参数写错了,可以直接修改inc.php文件

  1. 在login.html的登录模板给qq的登录图标,设置一个url地址,跳到home-memberController-qqLogin方法:

qqLogin方法如下:

点击下面的qq登录,出现qq弹框说明引入项目成功:

在qq回调域callback中获取openid和token

  1. 在home模块member控制器中建立一个qq回调方法名为qqCallback

获取到openid和token和qq用户相关的信息如下:

实现qq完成系统的登录

在前台会员表sh_member中加一个字段nickname在,记录用户登录成功的昵称。

1、先去系统中判断有没有此qq的openid 。做不同的业务逻辑

代码如下:

注:需要在member模型的入库的前钩子中,对密码加密进行判断,因为qq登录没有密码

登录成功效果:

三、完成分类列表页的面包屑导航

如下:

面包屑导航就是找当前分类的父分类。

核心:

找子分类:传递当前分类的cat_id,进行递归查找。

找父分类:传递当前分类的pid,进行递归查找。

代码

  1. 设置好首页的分类的链接地址:以三级分类筛选地址为例:

  1. 在home-CategoryController-index方法,取出当前分类的面包屑导航相关数据,并分配到模板中

同时在home模块的Category模型中定义一个getFamilyCats的方法,获取父分类

  1. 模板中遍历数据

模板复制前台模板的list.html到 /home/view/category/目录下,并改名为index.html

遍历数据:

效果:

四、实现分类列表页左侧分类菜单

分析

思路:

不管点击哪一个分类到此分类列表页,下图的蓝色区域都是当前分类的最顶级分类。

蓝色顶级分类下面含有二级分类,二级分类下又包含三级分类。

如下:

顶级分类:电脑办公

二级分类:电脑整机、电脑配件、办公打印等

三级分类:如电脑整机下有笔记本、超极本、平板电脑

代码实现

  1. 在index方法中取出所有的分类,以cat_id 为二维数组下标,把每个元素通过pid进行分组

  1. 模板中遍历数据

效果:

五、完成分类列表页商品的展示

分析

当点击某个分类的时候,应该把当前分类及其子孙分类下面的所有商品取出来。

如:当点击华为手机分类的时候,应该把华为分类下面的所有的商品取出来。

如:当点击国内手机分类时,应该把国内手机分类下面的所有的子孙分类的商品都取出来

代码实现

1、在home-categoryController-index方法中,取出当前分类及其子孙分类所有的商品

2、模板中遍历

效果:

六、完成商品详情页

1、实现商品详情页面包屑导航

2、商品基本数据的展示

3、实现商品详情页中的图片画廊的展示

4、实现商品详情页属性的展示

分析

单选属性:

注意一点:

因为单选属性的值可能有多个,所以我们可以把根据属性的attr_id进行分组,把相同属性的attr_id的值归为同一组,方便在模板中进行循环遍历。

唯一属性:

唯一属性不需要分组,因为唯一属性的值只有一个。

代码实现

5、实现商品详情页的浏览历史

分析

基本思路:

①可以使用cookie技术来实现浏览商品历史的存储,cookie中存储商品的goods_id即可。

只所以只存储浏览商品的id,因为商品的价格后面可能随时会变化,且记录一般存储3-5个。

②最新访问的商品应该放置在浏览历史的第一个位置

③当浏览历史存储量到达最大值(如超过5),应把最早访问的商品id给移除。

④当访问相同商品的时候,只保留最后访问的商品,即数组需要删除重复的元素。

cookie怎么存储所访问商品的id: 我们把访问商品的id存进数组中,再把数组写入到cookie中,形式如:[1,4,6,2,8]。

代码实现

 

标签: QQ 互联QQ 登录分类列表页左侧分类菜单分类列表页的面包屑导航邮件找回密码
上一篇文章

TP5商城(七)商品详情页、商品基本数据、面包屑导航、商品图片画廊展示、商品详情页属性、浏览历史、购物车、ajax添加商品至购物车

下一篇文章

TP5 商城(五)商城前台首页、首页导航栏、首页分类筛选、首页推荐位、前台会员注册、短信验证、前台会员登录与验证码、前台退出功能、邮箱找回密码

下一篇文章
TP5 商城(一)环境部署、数据表、后台首页、用户 CURD、Ajax 状态切换、后台登录、后台退出、后台防翻墙、RBAC

TP5 商城(五)商城前台首页、首页导航栏、首页分类筛选、首页推荐位、前台会员注册、短信验证、前台会员登录与验证码、前台退出功能、邮箱找回密码

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3