13-pyg-09加入购物车

三、加入购物车

1、商品详情页面-提交表单

点击“加入购物车”,需要发送请求并携带参数

①页面加一个隐藏的form表单,用于点击“加入购物车”后发送请求

在这里插入图片描述

②给 购买数量 input输入框加id属性,给“加入购物车”加id属性,

给“加入购物车” 禁用href,用于在js中进行DOM操作

在这里插入图片描述

③给“加入购物车”绑定点击事件,获取购买数量等参数,放到表单中并提交表单

在这里插入图片描述

2、控制器方法,处理表单

创建Cart控制器,继承Base控制器

在这里插入图片描述

在这里插入图片描述

基本思路:Cart控制器addcart方法,接收数据,调用封装的方法(下一步才封装),添加购物车数据。

在这里插入图片描述

添加成功后,查询商品信息用于页面展示, 见 4.加入成功页面展示

3、封装一个方法,添加购物车数据

思路:

①已登录,则添加数据到数据表;未登录,则添加数据到cookie中。

②以前添加过相同的购买记录,则累加购买数量,否则添加新纪录

已登录:添加到数据表

创建Cart模型:

在这里插入图片描述

在home模块下 创建logic目录,在logic目录下 创建CartLogic类文件,封装静态的addCart方法

在这里插入图片描述

注意:判断登录,需要根据自己情况,使用登录时设置的登录标识

在这里插入图片描述

已登录:添加到数据表

在这里插入图片描述

未登录,添加到cookie

注意:下图中的else 是 未登录的else

在这里插入图片描述

在这里插入图片描述

4、加入成功页面显示

Cart控制器addcart方法,查询商品信息

在这里插入图片描述

Goods模型中封装方法

在这里插入图片描述

在这里插入图片描述

整合模板,修改view/cart/addcart.html,展示商品信息 (模板文件原名称 success-cart.html)

在这里插入图片描述

5、测试

可以分别在未登录和已登录两种状态下进行“加入购物车”的测试。

已登录:添加购物车数据后,查看数据表即可

在这里插入图片描述

未登录:添加购物车数据后,查看cookie,可通过代码取出cookie数据并打印

用代码方式清除cookie购物数据 : cookie(‘cart’, null);

在这里插入图片描述

四、购物车列表显示

1、购物记录信息展示

①(整合模板)访问地址:Cart控制器index方法,cart.html => index.html页面

在这里插入图片描述

②封装方法,获取购物车数据

已登录,查询数据表,得到二维数组格式

未登录,查询cookie,得到二维数组格式

在这里插入图片描述

③在Cart控制器index方法中,查询购物车列表的数据,包含商品基本信息

在这里插入图片描述

④在view/cart/index.html中,遍历展示数据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、全选效果

① 全选 状态 影响每一行checkbox的状态。

给全选绑定onchange事件

获取到全选的选中状态(checked属性值)

给每一行的checkbox 设置checked属性值,保持和全选的状态一致

在这里插入图片描述

②每一行checkbox状态 影响全选的状态

给每一行的checkbox绑定onchange事件

获取所有行数(所有的单个的checkbox)

获取选中的行数(每一行选中的checkbox数量)

判断所有的行数和选中的行数是否相等

根据判断结果,设置全选的checked属性

在这里插入图片描述

3、计算已选商品数量和金额

application/home/view/cart/index.html

思路:

给每一行的checkbox绑定onchange事件中

给全选checkbox绑定onchange事件中

计算的过程:可以封装为一个函数,需要时调用即可

获取到所有选中行的checkbox

循环,取到每一个选中的行的checkbox

根据这个checkbox获取到当前行的数量(input的value值),小计金额(标签的innerHTML)

对数量和小计金额分别进行累加,得到总数量和金额

将计算的总数量和金额,显示到页面上(修改span的innerHTML值,修改i标签的innerHTML)

封装的函数change_total

在这里插入图片描述

全选和每一行的checkbox的change事件中,调用change_total函数

在这里插入图片描述

页面刷新时,直接调用一次change_total()

在这里插入图片描述

4、加减号修改购买数量-页面效果

在这里插入图片描述

五、登录时迁移cookie购物数据到数据表

思路:从cookie中取出所有的购物车数据,逐条添加到数据表。

封装cookieToDb方法,用于登录时将cookie中的购物车数据迁移到数据表。

在这里插入图片描述

在Login控制器dologin方法中,登录成功并设置登录标识后,进行购物车数据的迁移。

在这里插入图片描述

在Login控制器qqcallback方法中

在这里插入图片描述

六、修改购物车商品数量

1、前端页面发送ajax请求

需求:

可以通过点击每一行的+ -号,或者直接在input输入框中,修改购买数量。

购买数量的修改,最终需要在保存的购物车数据中修改,并不是只改页面展示。

分析:

需要发送ajax请求,由于参数一致(id, number),成功后的处理都一样,

可以在js中封装一个change_num函数,用于发送ajax请求修改购买数量

实现:

修改view/cart/index.html

在每一行的ul标签添加自定义的属性cart_id,存储id值

在这里插入图片描述

封装函数changenum

在这里插入图片描述

ajax成功后的处理

在这里插入图片描述

在js中,给+号和-号分别绑定点击事件,重新计算新的数量,调用change_num函数发送ajax

在这里插入图片描述

给input输入框绑定change事件,当输入框的值发生变化(失去焦点之后)则触发。

在这里插入图片描述

2、控制器中处理ajax请求

修改Cart控制器,增加一个changenum方法,用于ajax请求。

在这里插入图片描述

3、封装方法修改购买数量

思路:已登录,修改数据表;未登录,修改cookie

在这里插入图片描述

4、页面优化(数量错误时,恢复原状)

如果购买数量格式不对,提示之后,将页面上的数量恢复原状。

需要:在每一行的ul标签 增加一个number属性,记录原始的数量

在这里插入图片描述

每次发送ajax修改数量后,需要更新number属性的值。

在这里插入图片描述

input输入框的change事件中修改如下

在这里插入图片描述

5、修改数量后,重新计算小计金额

在这里插入图片描述

七、删除购物车记录

1、前端页面发送ajax请求

给页面上”删除”绑定点击事件,发送ajax请求删除数据

禁用a标签的href属性

在这里插入图片描述

绑定事件,发送ajax请求

在这里插入图片描述

ajax成功后的处理

在这里插入图片描述

2、控制器中处理ajax请求

在Cart控制器增加delcart方法,用于ajax请求

在这里插入图片描述

3、封装方法删除购物记录

思路:已登录,删除数据表记录;未登录,删除cookie中的记录。

在这里插入图片描述

八、修改选中状态

点击checkbox 修改对应记录的选中状态

每一个行的选中

在这里插入图片描述

在这里插入图片描述

全选选中

在这里插入图片描述

在这里插入图片描述

控制器方法中

在这里插入图片描述

封装逻辑方法

在这里插入图片描述

在这里插入图片描述

总结:

1、加入购物车(提交隐藏表单、控制器方法、封装逻辑方法、成功页面展示、封装查询商品和sku数据方法)

2、购物车列表(封装查询数据的逻辑方法、查询对应的商品和sku、遍历展示数据、js选中效果、加减号效果)

3、登录迁移购物车数据(封装逻辑方法、登录后调用方法)

4、修改购买数量(绑定3个事件、发送ajax请求-封装、成功后的处理;控制器方法、封装逻辑方法)

5、删除购物记录(发送ajax请求、成功后的处理、控制器方法、封装逻辑方法)。

6、修改选中状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值