商城6

商品属性框生成

功能需求:

在用户选择商品类型的时候,动态生成一个属性框

 

 

 

思路:

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

 

实操:

1.为商品类型绑定一个change事件,发送一个ajax请求(type_id

 

 

 

 

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

 

 

 

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

 

 

 

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

 

 

效果

 

 

 

 

商品属性保存表设计

 

 

  1. 这个属性值到时候是属于哪个商品的 goods_id
  2. 属性值是对应哪个属性的主键id?颜色:红色
  3. 属性值 attr_values

id

goods_id

attr_id(对应sh_attribute 的主键id)

goods_attr_values

 

 

 

 

 

 

 

 

 

 

 

 

 

商品属性框的name属性考虑

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

 

 

属性框name属性构造

 

 

 

 

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

 

 

 

商品属性框的值入库

  1. 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--->后台登录页面

 

  1. 在项目的根目录创建一个admin.php文件内容如下(主要是复制index.php

 

 

查看配置文件

 

 

效果:

 

 

 

前台模块

前台首页

  1. 复制静态资源

 

 

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

 

 

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

 

 

效果

 

 

 

商品分类

功能需求:

 

 

 

实现:

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

 

 

 

 

 

 

 

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

 

 

 

  1. index.html页面展示分类数据

 

 

  1. 效果

 

 

 

顶级导航

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

 

 

 

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

修改表结构:

 

 

 

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

 

 

 

2. index.html页面展示数据

 

 

效果

 

 

 

 

 

 

自定义活动

需要在添加分类的时候加表单框,并在category表中加2个字段,is_showurl

 

 

 

首页推荐位

 

 

一般来说,这个推荐位是自己根据业务来定:

例如

1. 疯狂抢购,自己如何去定义(商品价格最低的)

2. 猜你喜欢(select * from sh_goods order by rand()order by rand() 可以把表中随机的打乱。

 

 

 

 

实操:

  1. Admin模块的GoodsModel.class.php增加一个getGoods方法获取推荐位信息

 

 

 

// 猜猜 order by rand(); 注意:'rand()' 这里不能写双引号,引入rand()函数到时候是在MySQL里面进行执行的,如果是

// 双引号,PHP这个时候会进行解析,但是不希望PHP进行解析

 

  1. Home模块IndexController.class.php控制器的index方法里面调用上面的getGoods方法获取推荐位信息

 

 

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

 

 

效果

 

 

 

商品详情页

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

 

 

 

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

 

 

效果

 

 

效果:

 

 

 

放大镜插件

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

 

 

  1. detail.html页面引入插件

 

 

 

 

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

 

 

 效果

 

 

 

浏览记录

数据结构设计

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

 

 

实现技术点:

  1. 使用什么进行存储?

答:用户浏览过的商品信息保存在哪里?(cookie session memcache....)本次使用session保存

  1. 存什么样的数据信息?

答:商品主键id、商品名称、商品缩略图

 

  1. 存什么样的数据结构?(为什么要是商品的主键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) 底层:序列化

 

 

 

实操

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

 

 

 

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

 

 

 

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

 

 

效果

 

 

 

 

关联商品

注意:一般如果是一些大网站(jdtaobao)需要使用目前大数据(hadoop Java里面的一个软件,弊端:不是一个实时处理软件 storm 实时大数据处理)处理的技术进行海量数据分析(找出关联信息)

thinkPad x21电脑:2000

mouse G21鼠标:1900

 

我们自己在后台手工的进行商品的关联。

 

表设计

功能需求:在后台添加某件商品的时候,增加一个关联商品的功能。

 

 

如果一个商品关联多个商品信息,则我们需要将关联的商品信息保存起来,保存在哪里?

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

 

 

 

实操

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

 

 

 

  1. add.html商品添加页面增加一个关联商品select

 

 

效果

 

 

 

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

 

 

 

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

 

 

 

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

 

 

效果

 

 

 

优化处理

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

 

 

技术点:

layer插件

父子窗口通信问题

 

 

 

 


扩展

放大镜插件bug

 

 

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

 

 

 

 

面试:常见图片下载

网络请求(PHP发送http请求)

  1. fsocket() socket编程(麻烦:手工写http请求头请求主体)

 

 

  1. $content = file_get_content($url); 写入 支持get
  2. curl(函数库) get post (一般)

a) curl_init()

b) curl_setopt()

c) curl_exec()

 

 

以后做开发,上面除了curl使用的较多,其他的应该比较少。最多应该是如下的一个PHP的类库 guzzlehttp

http://guzzle-cn.readthedocs.io/zh_CN/latest/#guzzle

 

posted @ 2017-10-06 20:55  奋斗的黑蜗牛1号  阅读(210)  评论(0)    收藏  举报