商品相册图片删除

当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id【因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除】

//钩子方法_before_delete:删除前的操作
protected function _before_delete($option)
{
$id = $option['where']['id']; //要删除的商品的ID
/***********删除商品相片********/
//先查询出原商品相册的路径
$gpModel = M('goods_pic');
$pics = $gpModel->field('pic,sm_pic,mid_pic,big_pic')->where(array(
'goods_id' => array('eq', $id),
))->select();
foreach ($pics as $k => $v){
deleteImage($v); //$v是一个数组
}
$gpModel->where(array( //根据商品id删除数据库中的路径信息
'goods_id' => array('eq', $id),
))->delete(); /***********删除LOGO********/
//先查询出原来的图片的路径
$oldLogo = $this->field('logo,mbig_logo,big_logo,mid_logo,sm_logo')->find($id);
deleteImage($oldLogo);
/****** 删除会员价格 ********/
//根据商品表id 删除操作【后用了外键级联删除,则不需要写这段代码】
/* $mpModel = D('member_price');
$mpModel->where(array(
'goods_id' => array('eq', $id),
))->delete(); */
}

_before_delete()

注:TP中提供的数据库连贯操作语法where()会进行sql注入过滤,注意不能直接传入变量

修改图片时删除使用AJAX实现无刷新删除

1、在修改表单中列出已经上传好的商品相册

  先在控制器类GoodsController.class.php/edit()中,取出相册路径信息

在表单edit.html中输出

1.1、先定义显示的样式

1.2、在商品相册的table中显示

1.3、增加JS脚本控制“添加图片”

2、AJAX删除图片

2.1在“删除按钮”加上class,以便js脚本寻找;将每张图片的id放到删除按钮中

2.2编写js,删除图片

//删除图片
$(".btn_del_pic").click(function(){
if(confirm('确定要删除吗?'))
{
//先选中删除按钮所在的li标签
var li = $(this).parent();
//从这个按钮上获取pic_id属性
var pid = $(this).attr("pic_id");
$.ajax({
type : "GET",
url : "<?php echo U('ajaxDelPic', '', FALSE); ?>/picid/"+pid,
success : function(data)
{
//把图片从页面中删除掉
li.remove();
}
});
}
})

拓展thinkphp中的U函数

      thinkphp中的大U函数三个参数:
U('ajaxDelPic') ==> /index.php/Admin/Goods/ajaxDelPic.html
U('ajaxDelPic?id=1') ==> /index.php/Admin/Goods/ajaxDelPic/id/1.html
U('ajaxDelPic', array('id'=>1)) ==> /index.php/Admin/Goods/ajaxDelPic/id/1.html
U('ajaxDelPic', array('id'=>1), FALSE) ==> /index.php/Admin/Goods/ajaxDelPic/id/1

2.3 在商品控制器GoodsController.class.php中添加 ajaxDelPic方法处理这个请求

3、修改相册时,添加新图片

  思路:跟添加商品图片的思路一样:先判断是否上传图片pic,因为是批量上传,所以先将二维转成一维,然后循环上传

注:当处理logo的代码在处理图片pics的代码之下时,当处理完图片pics后,$_FLEFS中虽然还会存储着logo的信息,但$_FLEFS已经的下标已经不是logo,因为处理图片的代码是add(),当插入数据库操作执行后,$_FLEFS的属性会变动,原来的name是logo就变成0。

因此要先执行处理logo的代码

//钩子方法_before_update:更新前插入,在添加前会自动调用
protected function _before_update(&$data, $option)
{
$id = $option['where']['id']; //要修改的商品的ID
/**************处理LOGO******************/
//判断有没有选择图片 if($_FILES['logo']['error'] == 0)
{
$ret = uploadOne('logo', 'Goods', array(
array(700, 700),
array(350, 350),
array(130, 130),
array(50, 50),
));
$data['logo'] = $ret['images'][0];
$data['mbig_logo'] = $ret['images'][1];
$data['big_logo'] = $ret['images'][2];
$data['mid_logo'] = $ret['images'][3];
$data['sm_logo'] = $ret['images'][4]; //先查询出原来的图片的路径
$oldLogo = $this->field('logo,mbig_logo,big_logo,mid_logo,sm_logo')->find($id);
//从硬盘上删除图片
deleteImage($oldLogo);
} /**********商品相册处理********/
if(isset($_FILES['pic'])) //先判断是否有上传
{
$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' => $id,
));
}
}
}
}
/************处理会员价格****************/
$mp = I('post.member_price');
$mpModel = M('member_price');
//先删除原来的会员价格
$mpModel->where(array(
'goods_id' => array('eq', $id),
))->delete();
foreach ($mp as $k => $v)
{
$_v = (float)$v;
//如果设置了会员价格就插入到表中
if($_v > 0)
{
$mpModel->add(array(
'price' => $_v,
'level_id' => $k,
'goods_id' => $id,
));
}
} //过滤这个字段 【必须对所有输入内容进行过滤】
$data['goods_desc'] = removeXSS($_POST['goods_desc']);
}

PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)的更多相关文章

  1. PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新

    商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...

  2. PHP.32-TP框架商城应用实例-后台8-商品相册-添加

    商品相册[是商品的其他相片] 添加相册需求: 每张图片生成三张缩略图{50*50.350*350.650*650} 1.建表p39_goods_pic{id,pic,sm_pic,mid_pic,bi ...

  3. PHP.30-TP框架商城应用实例-后台6-商品会员价格删除-外键,级联操作

    商品会员价格删除 需求:当删除一件商品时,这件商品对应的会员价格也应该从会员价格表{price,level_id,goods_id}中删除掉. 有两种删除方法 1.在钩子函数_before_delet ...

  4. PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

    添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...

  5. PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除

     添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...

  6. PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改

    商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...

  7. PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

    权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...

  8. PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表

    表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...

  9. PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码

    Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...

随机推荐

  1. (WPF) DataGrid之绑定

    通过ObservableCollection 绑定到 DataGrid. 1. 前台Xaml. <DataGrid x:Name="dgMeasurements" Horiz ...

  2. 夜色的 cocos2d-x 开发笔记 00

    第一次写博客,本人还是大二学生,纯新手,无论是文章的技术性,还是参考性,都不高,但却是根据我的经历,开发过的真实过程,对自己记载一些备忘的笔记,更希望也能帮到一些人. 本人用的win7 + vs201 ...

  3. Python元组、列表、字典、集合

    1. 元组 元组由不同元素组成,每个元素可以存储不同类型的数据,元组是有序的,元组创建后不能再做任何修改. 元组的创建: tuple = ('a','b','c','d') 如果创建的元组只有1个元素 ...

  4. 腾讯CodeStar第二季前端突击队腐蚀的画解法步骤笔记

    所有题目地址:http://codestar.alloyteam.com/q2 本题内容:http://www.cnblogs.com/yedeying/p/3617593.html 腐蚀的画涉及到的 ...

  5. 【CCPC-Wannafly Winter Camp Day4 (Div1) F】小小马(分类讨论)

    点此看题面 大致题意: 给你一张\(n*m\)的棋盘,问你一匹马在两个点中是否存在一条经过黑白格子数目相等的路径. 简化题目 首先,我们来简化一下题目. 考虑到马每次走的时候,所经过的格子的颜色必然发 ...

  6. 【转】Spring 整合 Quartz 实现动态定时任务

    http://blog.csdn.net/u014723529/article/details/51291289 最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现, ...

  7. 图像上采样(图像插值)增取样(Upsampling)或内插(Interpolating)下采样(降采样),

    缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图.放大图像(或称为上采样(upsamplin ...

  8. pooling

    转自:http://www.gageet.com/2014/09182.php 本文部分参考了:http://www.zhihu.com/question/23437871 卷积层是对图像的一个邻域进 ...

  9. caffe怎么把全连接层转成convolutional层

    caffe中有把fc层转化为conv层的,其实怎么看参数都是不变的,对alex模型来说,第一个fc层的参数是4096X9216,而conv的维度是4096x256x6x6,因此参数个数是不变的,只是需 ...

  10. 16、SpringBoot------整合MapStruct

    开发工具:STS 前言: 前端提交往后端的数据,一部分是不需要存入数据库当中的: 后端从数据库中取出的数据,一部分是不可以交给用户的: 那么,po面向的是DB,vo面向的是客户端, mapstruct ...