-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path笔记
253 lines (216 loc) · 12.3 KB
/
笔记
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
DAY1
供应商模块的建立
供应商展示
_initialize方法初始化控制器信息,其中包括:用D方法创建了对应的模型类,通过方法名找到对应的标题信息,分配到页面中
搜索功能 搜索条件:供应商名称 状态为1(表示正常的)
供应商添加
给U方法一个参数,刷新页面 U('index',['nocache' => NOW_TIME])
由于添加和修改共用一个页面 要删除隐藏域的主键值
供应商修改
通过jQuery显示商品状态(是或否) $('.status').val([$row.status|default=1])
供应商删除
使用模型类的setField方法
更改供应商状态值为0,商品名称加上后缀_del
$data['name']=array('name'=>['exp','concat(name,"_del")'])
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY2
品牌管理
文章管理
使用自动完成添加文章的新增时间,
文章的信息通过联合查询获取到,alias方法给表取个别名,如下:
$row=$this->alias('a')->join("article_content as b on a.id=b.article_id")->find($id);
文章分类管理
由于文章分类信息会被多次使用 所以将获取文章分类信息封装到getList方法里,方便维护
其中的getField('id,name')传两个参数 返回array(`id`=>`name`)关联数组 id字段值为key name字段值为value
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY3
使用uploadify插件通过ajax 技术上传文件 异步处理可以减少用户等待时间 品牌模块使用到了该技术
官网地址:http://www.uploadify.com/
中文手册:http://wenku.baidu.com/view/9df6ce0bde80d4d8d15a4faa.html?re=view
操作步骤:
1.引入jquery文件 和 uploadify提供的js、css文件
2.配置uploadify上传参数,并指定一个php文件处理上传功能
3.配置ThinkPHP上传文件需要的参数
4.实例化上传文件类 调用上传文件方法 拼接保存的路径 将上传后的文件信息转换为json数据返回
5.在html文件中将返回的数据转换成js对象 取出需要的信息 为指定的表单属性赋值
6.交给layer插件提示成功或失败的信息
使用layer插件 实现不同的弹出框 提示上传失败或成功
网站是:http://layer.layui.com/
操作步骤:
1.引入jquery文件 和 layer提供的js、css文件
2.成功或失败代码如下:
layer.msg('上传成功',{icon:6,time:1000});
layer.msg(data.msg,{icon:5,time:1000});
使用ztree插件 替代下拉菜单来显示数据
ztree插件是国人开发的
网站是:http://www.ztree.me/v3/main.php
操作步骤:
1.引入jquery文件 和 ztree提供的js、css文件
2.准备ztree配置数据
3.准备节点数据 由php文件传过来的json字符串形式的数据
4.找到html节点并使用ztree的方法初始化
5.在ztree配置数据中添加callback属性,并为该属性添加一个onClick方法,方法的第三个参数就是点击的节点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY4
使用treegrid 插件 展示下拉菜单数据
官网地址:http://plugins.jquery.com/treegrid/
中文资料地址:http://www.php100.com/html/program/jquery/2014/0328/6730.html
操作步骤:
1.引入jquery文件 和 ztree提供的js、css文件
2.选择目标标签初始化
$('.tree').treegrid()
3.为表格添加tree类选择器
4.不是顶级分类的tr 上面加treegrid-parent-{'parent_id'}
使用nestedSets 操作嵌套集合数据
文件下载地址:https://github.com/kunx-edu/NestedSets
操作步骤:
1.引入相关文件,实现DbMysql接口
2.在实现接口的类中 每个方法里面打印传过来的实参(dump(func_get_args))
3.在有参数的方法中 拼接sql实现该方法
注意: 数据修改时要判断父节点id是否有变化
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY5
商品表的添加
使用到的插件: uploadify上传文件 ztree展示商品分类列表数据 layer实现弹出框 ueditor编辑文字
使用自动完成添加 料号、录入时间、商品状态
注意:开启事务 添加数据过程中失败则回滚 所有数据添加成功则提交
商品表数据的展示
商品的推荐状态(精品、新品、热销)要用图片展示出来(对号表示是 叉号表示否)
商品表的修改
商品回显:
使用jquery显示商品状态的选中状态
使用ztree显示商品分类
使用自定义方法arr2select回显 商品品牌 商品供应商 下拉菜单
使用联合查询回显商品基本数据和商品介绍
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY6
商品相册删除
先判断是新增的还是数据库已有的图片,如果是新增的可直接删除对应的节点,如果是数据库已有的
发送ajax请求 去数据库删除
商品搜索
使用自定义的arr2select onearr2select 方法获取搜索可选的列表数据,并实现回显
判断每一个搜索条件是否有值,有则将其添加到搜索条件数组中
权限的添加
使用nestedSets 计算层级关系
权限的修改
使用nestedSets 计算层级关系
权限的删除
物理删除
角色添加 角色修改 角色删除 都要开启事务并更新关联表 角色权限表
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY7
管理员表的添加
管理员表修改
管理员表删除
验证登录
管理员基本信息和权限信息保存到session中
获取当前管理员权限信息:
1.将admin表和role_permission表通过role_id关联起来查询管理员对应的角色可以访问的路径对应的id(permission_id)
2.查询admin_permission表获取管理员额外可以访问的路径对应的id(permission_id)
3.将步骤1和步骤2 的结果作为一个结果集和permission表通过permission_id关联起来查询可以访问的路径(path)
注意:前两个步骤都有个条件是管理员的id为当前登录管理员的id
权限验证
根据管理员的角色 以及拥有的附加权限 获取允许访问的路径,如果该管理员当前访问的路径不在允许访问路径,
则提示无权访问 跳转到登录页面或后退
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY8
菜单模块建立
实现的功能:
1.菜单模块添加 修改 删除 展示
2.当管理员登录到后台首页时,根据管理员的权限 展示管理员可以看见的菜单
3.管理员可以在后台首页点击 修改密码菜单 修改密码
注意:删除某个菜单时 要同时删除关联表对应的数据
自动登录
当管理员登录时如果勾选了记住用户名和密码 则需完成自动登录功能 流程如下:
1.生成令牌 并同时保存到cookie 和数据库 可设置过期时间一周
2.当管理员没有勾选记住信息,下次访问时,没有令牌则重新登录
3.有令牌,权限认证中会调用自动登录操作 根据数据库的令牌验证令牌是否正确 验证通过后,为了安全 更新令牌到cookie和数据库
4.获取管理员可以访问的路径 保存到session中
5.权限认证行为会根据session中管理员可以访问的路径信息 判断管理员的权限
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY9
用户模块的建立
用户注册功能
由于当用户输入的信息不符合规则时,应有提示 所以使用validation 插件验证用户输入信息是否符合规则
使用步骤
1.ext目录下引入插件文件
2.配置验证规则和错误提示信息 也可以指定一个函数去验证
3.更改错误信息样式 ,成功后清除错误信息
使用阿里大鱼接口发送短信
使用步骤
1.注册用户 申请短信签名和短信模板
2.将插件放到vendor目录下
3.将topsdk.php文件配置的常量粘贴到autoloader.php文件中
4.通过ajax请求将手机号 发送给后台 并访问发送短信操作
5.配置发送给用户的数据信息 包括 随机码 和产品名称
6.调用发送短信操作 发送成功返回给前台true 失败返回false
用户登录功能
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY10
邮件发送
使用步骤
1.注册126邮箱 设置发送和接收邮件协议
2.将PHPMailer文件夹插件放到vendor目录下
3.调用发送邮件方法
展示前台首页
将商品分类 文章分类 文章列表 数据保存到缓存中
数据缓存到redis中 并配置redis的参数
页面静态化
由于首页的数据不会经常变化 所以配置index控制器下的展示页面为静态页面 ,需要配置静态缓存
展示热销 推荐 热卖 的商品完整信息
session存入redis
由于redis存取速度块 并且用户数据不容易丢失 所以将session存到redis中
实现步骤:
1.实例化redis对象 连接redis 将这一步封装成一个方法以便其它功能调用
2.配置session存储的类型为redis 并配置其他参数
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY11
商品相册
使用七牛云上传相册 可以配置文件的格式 以便将图片改成指定大小 配合渲染页面的规则来展示
用户名动态加载
如果登录 则在右上角显示用户名 和退出功能
没有登录 显示登录功能
注意: 由于tp 自身bug 退出功能 要修改session的redis驱动下write的方法 cookie要加前缀
商品浏览次数保存到redis
商品每浏览一次通过ajax请求到后台 增加一次浏览次数 并保存到redis
设置任务计划 定期把浏览次数数据同步到数据库中 同步后关掉当前页面
保存购物车信息
1.用户未登录 将购物信息保存到cookie中
2.用户已登录 将购物信息保存到数据库中
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY12
用户登录后 将cookie中的购物车信息 根据商品id对应的 覆盖数据库中购物车信息
展示购物车信息 用户点击下一步 如果已登录跳转到下一步 未登录 先登录 再跳转到下一步
收货地址添加
使用三级联动展示省 市 区 下拉列表
1.通过ajax请求 现获取省级数据
2.当用户选择了某个省 通过change事件 将被选择的省级id作为数据发送ajax请求 返回该省包含的市
3.当用户选择了某个市 通过change事件 将被选择的市级id作为数据发送ajax请求 返回该市包含的区
4.将省市区的名字保存在隐藏域中 以便添加到数据库
收货地址修改
通过ajax请求回显市 区 名称
如果改为默认地址 要将之前的默认地址取消
收货地址展示
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY13
订单详细信息的展示
订单信息的添加
1.添加订单基本信息添加
2.添加订单关键信息添加
3.添加发票信息添加
会员级别添加
会员商品价格的添加
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DAY14
会员购买商品时 订单显示会员价格
已提交订单 会员可以看到订单的状态详细信息
调用支付宝接口 付款
使用步骤:
1.将支付宝对应的php插件 放到vendor目录下
2. 将alipay.config.php和alipayapi.php 里的代码 复制到项目对应的操作里,配置请求参数
3.调用对应的操作 完成支付。
库存不足时 订单不能提交
当库存不足时,订单提交失败。
定期取消未支付的超时订单
可自定义一个过期时间,将超过这个时间未支付的订单状态设为0(取消),并且还原库存
可以做一个任务计划 让该操作定期执行。