首页 > 代码库 > PHP.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

PHP.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

商品相册图片删除

当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品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.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)