PHP.32-TP框架商城应用实例-后台8-商品相册-添加
商品相册【是商品的其他相片】
添加相册需求:
每张图片生成三张缩略图{50*50、350*350、650*650}
1、建表p39_goods_pic{id,pic,sm_pic,mid_pic,big_pic,goods_id
- drop table if exists p39_goods_pic;
- create table p39_goods_pic(
- id mediumint unsigned not null auto_increment comment 'Id',
- pic varchar(150) not null default '' comment '原图',
- sm_pic varchar(150) not null default '' comment '小图',
- mid_pic varchar(150) not null default '' comment '中图',
- big_pic varchar(150) not null default '' comment '大图',
- goods_id mediumint unsigned not null comment '商品Id',
- primary key(id),
- key goods_id(goods_id)
- )engine=InnoDB default charset=utf8 comment '商品相册';
p39_goods_pic
2、在添加表单的商品相册处制作一个“添加一张”的按钮,通过JS实现点击一次增加一个文本域
- //添加一张
- $("#btn_add_pic").click(function(){
- var file = '<li><input type="file" name="pic[]" /></li>';
- $("#ul_pic_list").append(file);
JS demo
3、在商品模型GoodsModel.class.php/_after_inser()中添加处理商品相册的代码
思路:
1.利用已经封装好的函数uploadOne(名称,存放目录,[缩略图尺寸数组]),上传一张图片
- function uploadOne($imgName, $dirName, $thumb = array())
- {
- // 上传LOGO
- if(isset($_FILES[$imgName]) && $_FILES[$imgName]['error'] == 0)
- {
- $ic = C('IMAGE_CONFIG');
- $upload = new \Think\Upload(array(
- 'rootPath' => $ic['rootPath'],
- 'maxSize' => $ic['maxSize'],
- 'exts' => $ic['exts'],
- ));// 实例化上传类
- $upload->savePath = $dirName . '/'; // 图片二级目录的名称
- // 上传文件
- // 上传时指定一个要上传的图片的名称,否则会把表单中所有的图片都处理,之后再想其他图片时就再找不到图片了
- $info = $upload->upload(array($imgName=>$_FILES[$imgName]));
- if(!$info)
- {
- return array(
- 'ok' => 0,
- 'error' => $upload->getError(),
- );
- }
- else
- {
- $ret['ok'] = 1;
- $ret['images'][0] = $logoName = $info[$imgName]['savepath'] . $info[$imgName]['savename'];
- // 判断是否生成缩略图[$thumb数组存储尺寸]
- if($thumb)
- {
- $image = new \Think\Image();
- // 循环生成缩略图
- foreach ($thumb as $k => $v)
- {
- $ret['images'][$k+1] = $info[$imgName]['savepath'] . 'thumb_'.$k.'_' .$info[$imgName]['savename'];
- // 打开要处理的图片
- $image->open($ic['rootPath'].$logoName);
- $image->thumb($v[0], $v[1])->save($ic['rootPath'].$ret['images'][$k+1]);
- }
- }
- return $ret;
- }
- }
- }
uploadOne()
2、循环每张图片调用uploadOne一个一个处理,处理完插入到相册表中
先观察文件数据的结构,如下:
两种文件,一是商品logo{logo};而是商品相册pic{pic},一维数组logo;二维数组pic
因为商品图片pic是二维数组,而uploaOne只能处理一维数组,类似logo那样的数组结构,因此要转换为一维数组$pics[]
再进行图片处理
- //钩子方法_after_insert:添加操作成功后执行
- protected function _after_insert($data, $option)
- {
- /**********商品相册处理********/
- $pics = array();
- //var_dump($_FILES['pic']['name']);die();
- //二维数组转成一维
- foreach ($_FILES['pic']['name'] as $k => $v)
- {
- $pics[] = array(
- 'name' => $v,
- 'type' => $_FILES['pic']['type'][$k],
- 'tmp_name' => $_FILES['pic']['tmp_name'][$k],
- 'error' => $_FILES['pic']['error'][$k],
- 'size' => $_FILES['pic']['size'][$k],
- );
- }
- //var_dump($pics);die();
- $_FILES = $pics; //把处理好的数组赋给$_FILES,因为uploadOne函数是在$_FILES中获取图片的
- $gpModel = M('goods_pic');
- //循环每个上传
- foreach ($pics as $k => $v)
- {
- if($v['error'] == 0)
- {
- $ret = uploadOne($k, 'Goods', array(
- array(650, 650),
- array(350, 350),
- array(50, 50),
- ));
- //var_dump($ret);die();
- if($ret['ok'] == 1)
- {
- $gpModel->add(array(
- 'pic' => $ret['images'][0],
- 'big_pic' => $ret['images'][1],
- 'mid_pic' => $ret['images'][2],
- 'sm_pic' => $ret['images'][3],
- 'goods_id' => $data['id'],
- ));
- }
- }
- }
- /**********会员价格处理********/
- $mp = I('post.member_price'); //接收post提交过来的会员价格数据
- $mpModel = D('member_price');
- foreach ($mp as $k => $v)
- {
- $_v = (float)$v; //强制转为浮点型,以免插入字符等错误数据
- //设置会员价格>0就插入到表中
- if($_v > 0)
- {
- $mpModel->add(array(
- 'price' => $_v,
- 'level_id' => $k, //级别Id
- 'goods_id' => $data['id'],
- ));
- }
- }
- }
_after_insert
注意:批量上传时,uploaOne是处理不了二维数组的,必须转成一维数组,再用foreach循环插入数据库
问题:
1、上传的图片数量在表单看来是没有限制的,倒是在php.ini中限制了post_max_size,所以在商品添加表单还需做点优化,限制用户上传图片的尺寸和数量
2、PHP脚本默认的执行时间是30秒,可能会导致数据处理不完。可根据需求,在表单数据处理前使用set_time_limit()进行设置
PHP.32-TP框架商城应用实例-后台8-商品相册-添加的更多相关文章
- PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)
商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete: ...
- PHP.29-TP框架商城应用实例-后台6-商品会员添加-价格、级别
首先把需求分析搞清楚 主要实现两个功能 1.会员管理,设置成为会员的要求 2.添加商品时,可设置会员优惠价格 具体实现 1.建表[会员级别限定表p39_member_level{Id,级别名称,积分下 ...
- PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
- PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
随机推荐
- ArcGisJS的layers-add-result事件总结
map.on("layers-add-result", initEditing);当地图控件中的所有图层加载完毕之后触发. 注意图层加载完成后返回的的结果:event. funct ...
- 栅格那点儿事(四A)---栅格的显示与渲染
栅格的显示与渲染 通过前两章的学习,应该对栅格这个东西不那么陌生了.在这一个部分,我们来看看如何展示出栅格数据最美丽的地方,在ArcGIS中栅格的显示与渲染.在进入细节之前,先来看看在ArcGIS中都 ...
- css3实现iPhone滑动解锁
该效果的主要实现思路是给文字添加渐变的背景,然后对背景进行裁剪,按文字裁剪(目前只有webkit内核浏览器支持该属性),最后给背景添加动画,即改变背景的位置,背景动画效果如下(GIF录制时有卡顿,代码 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析
1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...
- Bootstrap开发
1.BootStrap开发工具 任意前端工具 专门Bootstrap工具:Jetstrap(下载地址:jetstrap.com) 2.官网: www.bootcss.com(“下载Bootstrap” ...
- js&jquery:添加事件的三种方法和常用的一些事件
一.添加事件的方法 1.EventTarget.addEventListener添加 获取事件目标元素,通过addEventListener函数添加 // Assuming myButton is a ...
- Windows下安装ElasticSearch及工具
转载自个人主页 前言 什么是ElasticSearch 官网如是介绍:Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能 ...
- JavaScript基础:逻辑运算符——&&和||(短路判断)和!
一.&&:所有条件都为true,返回true:只要有一个是false,返回false:不一定返回boolean类型值 1.可以操作任意类型的数据,不只是布尔型:(除了null.unde ...
- Html + JS : 点击对应的按钮,进行选择是隐藏还是显示(用户回复功能)
例如: 当我点击按钮1时,点击第一下进行显示This is comment 01,点击第二下隐藏This is comment 01 当我点击按钮2时,点击第一下进行显示This is comment ...
- 通过CSS3实现:鼠标悬停图片360度旋转效果
效果很好玩,代码很简单: 效果: 鼠标放置在图片上:360度顺时针旋转 鼠标离开图片:图片260度逆时针旋转 只要将下面代码拷贝过去,并将图片改成你想要的就可以看到效果 <!doctype ht ...