tp电商项目1
一、电商项目
一般来说我们实现某一个产品要么是完全新的开发(0-1的过程),我们这次是使用TP框架进行新的开发(0-1的过程),整体有一个概括。(但是需要注意的是,毕竟才8天左右的时间,有部分的功能可能就不是很完整)。在开发之前,我们需要使用一定的电商的产品来进行基本概念的理清。那么我们使用一下一个开源的产品(ECShop)。
ECShop简介
什么是ECShop?
答:是一个b2c(企业对用户)的开源商品(最先是为摩托罗拉商品做的),之前是上海商派公司开发的(高春辉:高老)。现在这个产品已经被shopNC收购。这个产品目前基本不再做版本更新。(小的维护)(雪藏),需要注意的是该产品目前兼容性有点小问题(不能在高版本的PHP上面运行。)

集成开发环境:PHPstudy

几个概念?
b2c:企业对客户(地方性的电商网站)
c2c:客户对客户 淘宝(个人对个人)
b2b:企业对企业 天猫(商家、租金、保证金)、京东(自营、第三方入驻)
o2o::线上(商铺)和线下(仓库为主) 京东、唯品会、苏宁、国美
........
安装和使用
1. 建立虚拟主机,配置host文件

- 下载和解压(虚拟主机目录)

3. 浏览器访问安装(域名+install)

4. 安装过程中数据库配置和管理员账号配置

5. 前台效果

通用的使用步骤
需要注意的是,该产品存在一个通用的使用步骤,掌握该步骤之后,无论是用该产品做什么类型的电商都是可以快速的上手。(手机、电脑、农产品、书本.....)
通用使用步骤简介
1、 建立一个商品类型
- 什么是商品类型?
- 答:商品类型指的就是这个商品是出售什么类型的产品,例如买手机、就叫做手机商城....
2、 为商品类型指定属性
- 什么是属性?
- 答:指的就是商品的特征(共同特征和特殊特征)
- 对于不同的商品类型,不同产品之间是存在不同点的,例如手机产地、容量、制式..... 例如农产品甜度、绿色.....
- 注意:当我们建立某个商品类型之后,需要为该商品类型指定相应的属性(根据一类事物进行高度的抽取,例如手机商城:a. 品牌 b.产地 c.制式 d.容量....)
3、 建立分类
- 为什么要建立分类?
- 答:主要是为了更好的管理商品。(例如:Apple手机 5G栏目)
- 特点:一般来说我们做的分类都是无限极的分类,但是需要注意的是,一般来说无限极做到四级左右就可以了,不要做的过深。(SEO url目录结构最好不要超过是3级)很多公司考虑到无限极分类其实不会真的是无限极分类,可以使用配置文件进行配置。
4、 添加商品
- 添加出售的商品的时候,不同的商品类型下,属性是不一样的,我们需要根据不同的商品类型,而单独生成对应的属性填写框。
实操商品管理
- 建立商品类型

2. 为商品类型添加属性

3. 产地属性内容填写

需要注意的是,属性是可以分类的,一般为唯一和单选属性。同时属性在填写的时候,也是可以使用不同的方式进行属性值的填写,一般为手工填写和列表选择。
4. 甜度属性内容填写

5.是否绿色属性内容填写

- 商品分类信息填写

- 在指定栏目下,添加商品;选择商品类型,为对应的商品添加属性

属性填写

8. 前台商品展示效果


总结:
- 商品类型,一个网站是卖啥,就是啥商品类型,名称可以自己定义
- 我们需要为商品类型添加对应的属性,到时候会在商品添加的时候,根据用户选择的商品类型而生成对应的属性填写框。属性是可以分类的,一般来说是可以分类唯一(在购买页的底部进行显示,用户是不可以选择的,只能看)和单选属性(在购买页的右侧进行展示,一般是可以选择的)。同时属性的属性值的填写也是可以进行分类处理,一般来说是可以分为手工填写(input框)和列表选择(select框)
- 一般来说我们会在后台建立分类(主要是为了更好的管理商品)
- 添加商品(1. 选择分类 2. 选择商品类型,生成对应的属性填写框,不同的商品类型的属性填写框是不一样的)
问题:引入商品类型有啥好处?
答:主要是为了后期的商城的扩充方便。(一个ECShop可以实现不同的商城)1. 电脑 2. 蜂蜜 3. 海鲜....
二次开发-邮箱登录
对于二次开发,有一个大致的认识,知道如何去做二次开发(体现是一个野的路子)沿着别人的逻辑去找(体现程序员的思维)
功能需求:

1. 关闭注册时候不必要的项目(后台去大致查看)

后台关闭用户注册时候的不必要的信息

2. 用户进行注册

3. 在注册完成后,希望可以使用邮箱进行登录

- 查看登录表单的提交action为user.php,查看user.php里面对登录的处理
我们需要查找$user在哪里进行实例化,在当前文件搜索没有发现,则只可能在当前文件的顶部开始在某个引入的文件里面进行实例化操作。

- 在user.php文件的顶部引入的init.php文件里面进行搜索,发生$user是init_users()函数进行返回的

通过在init.php文件进行搜索,没有发现init_users()函数,那么只能从顶部开始在某个文件进行引入的

- 在lib_common.php文件发现init_users()函数引入

通过函数里面类文件的引入,我们定义到$user对象的类文件在如下位置,但是在当前文件没有login方法,则在该类的父类里面肯定存在login方法,那么查看该类的父类,然后进行处理

父类文件'includes/modules/integrates/integrate.php'

注意:在lib_common.php文件里面存在大量的公共函数,例如is_email()函数

如何追踪代码的执行的逻辑?二次开发不要改别人代码,只能加。
二、环境搭建
开发环境:
代码管理:SVN本地(公司现在使用的是SVN内部的代码管理、git开源产品的管理 github、laravel ---》composer进行管理)(国内oschina上面有一个叫码云的产品,中国版的GitHub)
数据库管理工具:少使用命令行、一般使用图形化的界面(phpmyadmin web版的管理工具很多、 navicat for mysql 很不错的 sql小海豚 front)尽量做到每个工具都有使用过,但是一定要有擅长的工具。
PHP集成环境:PHPstudy(wamp xamp 现在公司使用比较多的是 vagrant 进行环境搭建,可以保证开发环境严格的一种,引入一个叫做boxes的概念)PHP版本是5.4版本(PHP7了解: 1. PHP7里面参数是可以使用基本数据类型进行约束 function getUserById(int $id) :array{})
开发工具:phpstorm(webstorm)称得上IDE(laravel) 、 netbeans、 zendstdio 、文本编辑器:sublime Text3版本(开发)、atom(GitHub开源产品)、vscode(微软)
SVN管理代码
- 建立一个虚拟主机(local.tp.com)

如果使用SVN进行管理,必须是空目录

- 代码初始化(一般来说是经理完成)
检出地址:http://192.168.84.28:8080/svn/local.tp.com/
用户名:php25
密码:php25

- 下载一个thinkPHP3.2.2版本做开发(初始化提交到SVN仓库)

- 浏览器进行访问(生成基础性模块Home模块)

去除不必要的目录

- 配置项目的静态资源目录和文件上传目录

- 建立本次开发的数据库


- 配置项目数据库信息(参考TP提供的convertion惯例配置文件)

后台首页搭建
一般后台的首页都是一个品字形的框架集(头部、左侧、右侧)
模板:现在很多使用 h-ui admin框架 layUi

- 在Admin模块建立一个IndexController控制器文件,增加四个方法

- 复制对应的静态资源到项目目录和建立对应的视图文件

视图文件

- 替换静态资源目录对应的css和js以及img对应的路径

4. 效果,虽说现在框架集不建议使用(w3c不建议使用,但是在后台还是继续使用)

三、后台的用户管理
现在我们先实现后台的用户的管理,然后进行登录操作。需要注意,后面我们会学习rbac做用户的权限管理,到时候会有角色的概念。(大致:1. 有权限(控制器下的一个方法) 2. 建立角色(为角色分配权限) 3. 建立后台的用户(为用户分配角色))。先把用户的模块先完成,在实现rbac模块。
表设计sh_user
完成一个后台的用户管理,要先进行表的设计。
id 主键 smallint unsigned auto_increment primary key comment '主键ID'
username varchar(30) not null comment '用户名'
password char(32) not null comment '密码'
salt varchar(30) not null comment '盐'
email varchar(30) not null comment '用户邮箱'
add_time int unsigned comment '时间戳信息,下去查一个时间戳的2038问题'
login_ip int unsgined comment '对于点分式的IP字段,一般我们在保存的时候都是先把IP转换为对应的整数进行保存,ip2long long2ip 好处:1. 查询快 2. 节省空间'
login_time int unsgined comment '登录时间戳'
mark_up text comment '备注信息'
role_id tinyint not null default 0 comment '0代表还没有分配角色'
表结构

初始化操作

INSERT INTO `sh_user` VALUES ('1', 'caoyang', '26e1cd35f63895eee179cd5cb37af999', '597ee404d9ef3', 'gogery@163.com', '0', '0', '0', '备注信息', '1');
后台用户初始化
注意:一般来说后台用户表设计完成后,都会初始化一条超级管理员的账号(天生要存在,并且该用户也不能被删除,也不能被修改)
insert into sh_user values('..............');
整数数据范围
答:mediumint(无符号:0-1千六百万)一般我们使用的比较多的是mediumint
int(无符号:0-42亿)
对于用户名或者是商品名称这类字段是否需要家里索引?
答:具体的业务具体看。
- 如果我们的业务需要做模糊的匹配(yang、iPhone)
> select * from TableName where username like "%yang%";(全表扫描)
- 如果我们的业务是做精准匹配偏多(曹阳),索引就有意义(如果用户名或者是商品名称必须要唯一,适合建立唯一索引)
密码强度的处理
答:需要注意,由于单纯的md5容易被暴力破解(字典),一般我们都使用双重md5处理(然后也可以叫做加盐)。规则:md5( md5('用户提交的密码') + 盐(随机字符串 uniqid()) );
用户的curd操作(增删改查)
完成一个用户的curd模块需要使用如下几个文件:
- 控制器文件(curd):UserController.class.php(命名规则:一般来说是去除表前缀之后使用大驼峰的方式进行命名 UserController(类后缀) .class.php sh_goods_info表 GoodsInfoController.class.php)
- 模型文件(验证)如果是模型文件命名,必须和去除表前缀的名称一致 UserModel.class.php(sh_user)
- 三个视图文件(add.html 、 lst.html 、edt.html)(注意a.:TP里面的视图文件的后缀.html b. 一般来说我们TP里面可以使用标签语法,也可以使用原生PHP代码 很多开源产品基本都是使用的原生PHP代码 )
用户增加
- 在Admin模块增加一个UserController.class.php控制器文件,增加一个add方法

- 增加一个add.html视图文件

效果

- 在Admin模块增加一个UserModel.class.php模型文件,主要负责数据的校验,以及数据的附加处理(例如,密码的加密操作,到时候会使用模型里面的钩子函数进行处理)


用户展示
- 在Admin模块的UserController控制器文件增加一个lst方法(不要使用list关键字),获取所有数据

- 增加一个lst.html视图文件

效果

用户编辑
1.在Admin模块的UserController控制器文件增加一个edt方法,完成编辑操作
更新入库 save返回值是受影响的行数,有可能为0,
所以需要这样判断if( $userModel->save() !== false ){}

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

效果

3.在Admin模块增加一个UserModel.class.php模型文件,主要负责数据的校验,以及数据的附加处理(用户编辑的时候可以密码留空)

更新钩子函数

用户删除
1.在Admin模块的UserController控制器文件增加一个del方法

四、插件-validate
简介
jquery的作者之一进行开发维护的。

下载和使用
1. 先将插件文件复制到静态资源的目录

- 在用户添加的add.html视图页面进行先引入

3. 在add.html页面为要验证的表单定义一个id和验证提示的样式信息,然后使用js代码调用

代码调用

- 效果


浙公网安备 33010602011771号