商城6
商品属性框生成
功能需求:
在用户选择商品类型的时候,动态生成一个属性框

思路:
- 为商品类型绑定一个change事件
- 发送一个ajax请求(type_id)
- 后台接收请求(根据type_id去查询sh_attribute表)
- 返回数据,前台根据数据做处理,放置在页面上
实操:
1.为商品类型绑定一个change事件,发送一个ajax请求(type_id)


定义一个复制函数,完成当前行的复制

2.后台接收请求(根据type_id去查询sh_attribute表)

3.返回数据,前台根据数据做处理,放置在页面上

效果

商品属性保存表设计

- 这个属性值到时候是属于哪个商品的 goods_id
- 属性值是对应哪个属性的主键id?颜色:红色
- 属性值 attr_values
|
id |
goods_id |
attr_id(对应sh_attribute 的主键id) |
goods_attr_values |
|
|
|
|
|
|
|
|
|
|


商品属性框的name属性考虑
- 由于每个属性都是一个li,并且可以存在多个属性,则name属性应该为一个数组,同时下拉框可以存在多个选择,应该也是一个数组;最后由于数据表需要保存属性值对应的属性attr_id,所以在设置name属性的时候,使用attr_id作为数组的key

属性框name属性构造

2. 属性框提交后的数据结构查看

商品属性框的值入库
- 在GoodsModel.class.php模型的插入的后置钩子函数完成属性值的入库

2. 原生sql查看商品属性值信息
mysql> select a.*,b.attr_name from sh_goods_attr a left join sh_attribute b on a.attr_id = b.attr_id where a.goods_id = 15;

总结:
后台主要是实现了
rbac模块(实现过程中主要是使用三张表)
商品模块(实现使用五张表)商品类型、属性、分类、商品表、商品属性值
学习中:学习了很多的插件(敏捷开发)拿来主义
后台定义一个入口地址
前台index.php入口,访问: 域名/index.php--->前台首页
后台admin.php入口,访问:域名/admin.php--->后台登录页面
- 在项目的根目录创建一个admin.php文件内容如下(主要是复制index.php)

查看配置文件

效果:

前台模块
前台首页
- 复制静态资源

- 建立IndexController.class.php控制器文件,增加index方法

- 增加一个index.html视图页面

效果

商品分类
功能需求:

实现:
- 在Admin模块的CategoryModel.class.php模型文件增加一个getData方法,获取三级分类信息【每次装的时候,放在最后面】



- 在Home模块IndexController.class.php控制器的index方法里面获取三级分类信息

- 在index.html页面展示分类数据

- 效果

顶级导航
一般来说顶级导航都是显示商品分类pid为0的分类信息

一般在导航里面这些顶级栏目信息,都会在后台存在一个是否开启显示,同时一般来说还存在一个自定义的链接地址(如果填写,则以填写的为准,如果没有则系统生成)
修改表结构:

- 在Home模块IndexController.class.php控制器的index方法里面获取导航分类信息

2. 在index.html页面展示数据

效果


自定义活动
需要在添加分类的时候加表单框,并在category表中加2个字段,is_show,url


首页推荐位

一般来说,这个推荐位是自己根据业务来定:
例如
1. 疯狂抢购,自己如何去定义(商品价格最低的)
2. 猜你喜欢(select * from sh_goods order by rand()) order by rand() 可以把表中随机的打乱。

实操:
- 在Admin模块的GoodsModel.class.php增加一个getGoods方法获取推荐位信息

// 猜猜 order by rand(); 注意:'rand()' 这里不能写双引号,引入rand()函数到时候是在MySQL里面进行执行的,如果是
// 双引号,PHP这个时候会进行解析,但是不希望PHP进行解析
- 在Home模块IndexController.class.php控制器的index方法里面调用上面的getGoods方法获取推荐位信息

- 在index.html首页展示推荐位信息

效果

商品详情页
- 在Home模块IndexController.class.php控制器的detail方法获取商品详情

- 增加一个detail.html视图页面

效果

效果:

放大镜插件
- 将放大镜插件放置在网站资源目录

- 在detail.html页面引入插件


- 在需要使用放大镜的图片外层包裹一个a链接,并且设置href地址为大图地址,同时设置一个class属性,属性值为MagicZoomPlus

效果

浏览记录
数据结构设计
当用户访问过某些商品之后,可以把商品的信息保存起来,在访问其他页面的时候做一个浏览记录的展示效果。

实现技术点:
- 使用什么进行存储?
答:用户浏览过的商品信息保存在哪里?(cookie session memcache....)本次使用session保存
- 存什么样的数据信息?
答:商品主键id、商品名称、商品缩略图
- 存什么样的数据结构?(为什么要是商品的主键id作为key主要是为了保证数据的唯一性)
答:$_SESSION['goods'] = array(
key = >value,
key2 = >value2
)
key: 商品主键id
value: array('id', 'goods_name', 'goods_thumb') 是一个一维数组(底层是序列化的字符串数据)
数据:
基本数据类型(number string boolean null)
复合数据类型 (object array resource) 底层:序列化

实操
- 在Home模块的IndexController.class.php控制器文件增加一个_historyData方法,保存浏览记录信息

- 在在Home模块的IndexController.class.php控制器文件的detail方法里面调用_historyData方法获取历史信息

- 在detail.html页面显示浏览记录信息

效果

关联商品
注意:一般如果是一些大网站(jd、taobao)需要使用目前大数据(hadoop Java里面的一个软件,弊端:不是一个实时处理软件 storm 实时大数据处理)处理的技术进行海量数据分析(找出关联信息)
thinkPad x21电脑:2000台
mouse G21鼠标:1900个
我们自己在后台手工的进行商品的关联。
表设计
功能需求:在后台添加某件商品的时候,增加一个关联商品的功能。

如果一个商品关联多个商品信息,则我们需要将关联的商品信息保存起来,保存在哪里?
答:表的设计?我们可以在goods表里面加一个is_relation字段,然后使用一定的分隔符来保存多件关联商品。(1:N多的设计)

实操
- 在Admin模块的GoodsController.class.php控制器文件的add方法里面获取所有的商品信息

- 在add.html商品添加页面增加一个关联商品select框

效果

- 在Admin模块的GoodsModel.class.php模型文件的插入前置钩子函数里面完成关联商品字符串的处理

- 在Home模块的IndexController.class.php控制器文件的index方法里面获取关联商品信息

- 在detail.html商品详情页展示关联商品信息

效果

优化处理
在商品添加页面,当用户点击关联商品的时候,做出一个弹窗效果,选择关联商品信息。

技术点:
layer插件
父子窗口通信问题
扩展
放大镜插件bug

修改导航的z-index属性即可

面试:常见图片下载
网络请求(PHP发送http请求)
- fsocket() socket编程(麻烦:手工写http请求头请求主体)

- $content = file_get_content($url); 写入 支持get
- curl(函数库) get post (一般)
a) curl_init()
b) curl_setopt()
c) curl_exec()

以后做开发,上面除了curl使用的较多,其他的应该比较少。最多应该是如下的一个PHP的类库 guzzlehttp
http://guzzle-cn.readthedocs.io/zh_CN/latest/#guzzle

浙公网安备 33010602011771号