zoukankan      html  css  js  c++  java
  • PHP.33-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']);
            }

     

  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/6996425.html
Copyright © 2011-2022 走看看