商城4
商品分类
实现思路(做事,看选择)
一般我们做的分类展示都是使用无限极的分类,一般实现的思路都是这样:
方式一:一般是这样做的(权限展示)(性能问题,理解方便)
- 设计表的时候需要增加一个pid字段(保存上级的ID)
- 使用递归函数进行数据的处理(数据存在层级)
方式二:继承法(全路径法)进行实现:(明白:实际使用很少,但是面试很喜欢问)
- 设计表的时候需要增加一个pid字段,但是还要增加一个额外的字段来保存其层级关系(path)(路径的表示有特定的要求)
a) 如果是顶级信息(pid=0),则path字段的值为当前记录的主键ID
b) 如果不是顶级信息(pid!=0),则path字段为自己的上级的path -(中划线连接)自己主键ID
- 使用这样的sql: select * from sh_category order by path;(需要注意,这样取出来的数据天然排好序)
面试:如果你回答的某个问题的答案不是面试官所期望的,则默认是错的。(以他的知识面认为你的回答是错误)(部分的经理 不是PHP 管理团队 资源整合)
问题:PHP单例(三私一公 没有任何问题 100%)(Java: 懒汉模式、贪婪模式)
出去面试:回答问题的一定要思考,同时要注意面试的变化(细微的变化)(千万停下来不说了)
方式三:使用也有(完全使用配置文件进行处理)(原因: 后期项目上线之后,栏目信息基本不改)

表设计
id 主键id
cate_name 栏目名称
pid 上级栏目id
path 层级关系
下面字段是可选
cover_img 栏目封面
site 栏目的链接
descption 栏目的描述

栏目添加
- 增加一个CategoryController.class.php控制器文件,增加一个add方法

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

效果:

- 增加一个CategoryModel.class.php模型文件,完成自动验证和额外的数据处理
自动验证和层级关系数据获取:

path处理:

注意:
1. 如果是顶级,则path为自己的【主键ID】
2. 如果不是顶级,则为自己的上级path-主键ID
3. 代码是写在模型里面,写在模型的什么方法里面(插入之后:因为我们的path字段是依赖主键ID,在插入的后置钩子里面存在插入的主键ID)
栏目展示
1.增加一个CategoryController.class.php控制器文件,增加一个lst方法

2.增加一个lst.html页面

3.在CategoryModel.class.php模型文件,增加一个getTree方法获取分类信息

效果

商品模块
我们现在要实现商品的添加,但是在添加之前,先完成表的设计。
商品:基本信息(名称、价格、缩略图) + 属性(商品类型---》属性框)
商品:商品分类
表设计
id主键id
goods_name 商品名称
goods_price 商品价格(decimal)
goods_number 商品库存
goods_sn 商品货号(内部使用)一般注意,这个货号可以用户自己填写,也可以程序生成,要唯一
cate_id 商品分类id
type_id 商品类型(属性框)
is_sale 是否上架(淘宝、宝贝)
is_delete 伪删除(一般来说这种商品信息是不能物理删除,磁盘上删除;一般只做逻辑上的删除,也就软删除,就是设计一个字段,字段的值如果为1代表已经删除(要么不获取,或者是取出来不显示),为0代表没有删除)
is_new 是否新品
is_best 是否精品
is_hot 是否热销
goods_img 商品图片
goods_thumb 商品缩略图
goods_descp 商品描述
add_time 添加时间



下去之后,查看ECShop和TPshop的商品表字段。(开源产品的表结构是很值得研究)
问题:关于商品的评论,需要注意1个商品评论是很多,一般是增加一张附加表来保存商品的评论信息
|
id |
goods_id |
user_id |
content |
add_time |
...... |
|
|
|
|
|
|
|
商品添加
- 增加一个GoodsController.class.php控制器文件,增加一个add方法

- 增加一个add.html页面

效果

- 增加一个GoodsModel.class.php控制器文件,完成自动验证和额外数据的处理
回调函数需要return返回数据

图片上传
- 在GoodsModel.class.php模型文件定义一个插入的前置钩子函数完成上传处理



- 在config.php定义上传配置信息

- 建立上传根目录

百度:
- jQueryUI 使用很广(用到的可能性很大)
- EasyUI(部分公司使用)
- ExtJs使用很少(重型js框架 后台使用,一般也是Java使用 ExtJs)
- 后端展示(datatable插件)(不错的)
商品展示
1.增加一个GoodsController.class.php控制器文件,增加一个lst方法

2.增加一个lst.html视图页面

效果

商品删除
- 在GoodsController.class.php控制器文件,增加一个del方法,点击之后可以将商品加入到回收站

效果

回收站列表
1.增加一个RecoveryController.class.php控制器文件,增加一个lst方法,展示回收站信息

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

效果

回收站还原
- 在RecoveryController.class.php控制器文件,增加一个reback方法,将伪删除的商品进行还原

回收站删除
1.在RecoveryController.class.php控制器文件,增加一个del方法,完成物理删除

2.需要注意的是,在完成回收站商品删除的时候,一般我们需要删除商品对应的图片,在GoodsModel.class.php模型文件增加一个删除的前置钩子函数

插件使用
日历插件
网站:http://www.layui.com/laydate/
1. 将laydate插件引入到资源目录

- 在页面上引入插件,代码调用

相关资料:http://momentjs.cn
百度插件-ueditor
网站:
http://ueditor.baidu.com/website/onlinedemo.html
(前端构建工具很好)(自己构建 gulp + npm + grunt + webpack......)
1.下载百度ueditor插件,然后放置到网站资源目录

- 在页面上引入相应的插件,然后为需要调用的textarea定义ID属性

- 代码调用

- 效果

额外扩展:p段落是可以被编辑的。


过滤插件-HTMLPurifier
问题产生
当使用百度的富文本编辑后,入库的数据在展示的时候,没有正常的展示

TP本意是好的,为了防止xss攻击,但是让TP底层使用htmlspecialchars进行处理后,使得富文本编辑器设置的样式全部失效。如何解决?
答:如果是直接在转的化有可能产生xss攻击(htmlspecialchars_decode)。我们是有选择性的处理(例如用户的添加的数据里面如果存在script标签,则过滤掉,如果没有危险,则原样保持<p></p>?,不做实体转换,直接保持到数据库,到时候显示的时候可以直接显示。)
不可能自己去手工的去做判断,那我们可以使用一些专业(htmlpufier插件)的插件来完成额外的处理。
- 可以自己编写过滤处理机制 str_replace('<script>', '', $content);
- 使用HTMLPurifier插件
网站:http://www.piaoyi.org/php/HTML-Purifier-PHP-xss.html
插件使用
- 将插件包放置到网站根目录

- 在function.php文件定义如下函数

3. 修改配置文件,使用自己定义的过滤函数

灯箱插件
- 将灯箱插件资源放置到网站资源目录

- 在lst.html页面,引入灯箱插件的css和js文件


- 在lst.html页面的图片展示标签包裹一个a链接,设置一个data-lightbox属性,同时设置href属性的值为大图的地址

- 效果

扩展
常见的http的状态码有哪些?(笔试、面试者提问)(主要不是运维)
答:
1xx系列(内部状态,基本在网络请求不会出现)
2xx系列(基本不用在了解) 200代表是成功
问题:301 和 302的区别?(注意:304)
答:301代表是永久重定向:一般是公司有钱了,买了更好的域名,要做域名的升级。
京东:360buy(运营3年)----> jd.com(习惯养成)mi vip
淘宝部分:v1.taobao.com ---> v2.taobao.com----->v3.taobao.com---->taobao.com
302代表是临时重定向:一般在公司的项目进行部分的升级或者是网站受到攻击(DDOS攻击: 1. 硬件(分布式) 2. 硬件防火墙)暂时做一个友好性的处理,跳转到一个临时的页面进行信息的告知。
设置:常见
- PHP层面header('url', 301/302);
- 配置域名解析(万网、西部数码、新网、易名、godady.....)

- 配置web服务器

http://www.cnblogs.com/aseoe/p/linux_apache_301.html
400系列(404和403)
答:404代表是用户访问的资源在服务器端不存在,则会出现404(一般是客户端输入的URL地址不对,服务器无法找到资源)。注意:对应SEO来说,很不喜欢网站出现404链接(死链)一般公司会写一个404的捕捉器(自己写也好,也可以使用专门站长工具进行分类,找出404页面,进行友好的处理 1. 404页面处理 2. 设置一个友好的404页面) SEO喜欢(外链 资源类型的网站---》阮一峰、鸟哥 内链---》关键字都是链接)
403一般是用户没有权限去访问服务器的某个目录(无权 deny Linux 600) 或者是web服务器开启了用户认证(例如Apache有auth模块,开启之后需要使用用户名和密码才可以进行访问)

500系列(500 和 502错误)
答:500是web服务器出问题(例如配置文件出错、web软件本身出现bug(软件的设计者))
Linux openssl 心脏滴血
502一般不是web服务器(静态资源服务器),一般是后端的动态服务器没有正确的响应(动态服务器没有启动、或者是网络延时比较长、丢包、 或者是动态服务器太忙,无法正常的进行响应)

浙公网安备 33010602011771号