TP---后台商品分类


做分类管理  新建控制器  CateController.class.php 
我们把对数据库操作的公共部分 写在模型类里面  模型类是在Model文件夹下面  声明方式 CateModel.class.php  需要继承Model类  手册
在模型类里面写你的数据库操作,在控制器里面采用D('Cate')实例化一个模型对象,采用对象调取你封装的数据库操作
在CateModel.class.php 中
namespace Admin\Model;
use Think\Model;


class CateModel extends Model{
    /**
     * 字段验证的规则
     * @var array
     */
    protected $_validate = array(
        array('name','require','分类名字必须存在并且不能重复',1,'unique',1), //默认情况下用正则进行验证
        array('p_id','number','父级id错误',1), //默认情况下用正则进行验证
    );


    /**
     * 查询分类的方法
     * @param int $p_id 父级分类id 如果不传  表示查询1级分类
     * @return mixed 返回查询到的数组
     */
    public function get_list($p_id=0){
        $cate = M("cate");
        $data = $cate->where("p_id=".$p_id)->select();
        return $data;
    }
}


在CateController.class.php  中
class CateController extends BackController{
    /**
     * 进入分类列表
     */
    public function index(){
        //先查询出一级分类
        $cate = D("Cate"); 实例化Cate类
        $data = $cate->get_list();
        //然后分别查询每个一级分类下面的子分类
        foreach($data as $key=>$val){
            //$val['id']
            $data1 = $cate->get_list($val['id']);
            $data[$key]['son'] = $data1;//把查询到的子分类放入到当前循环的变量里面
        }
        $this->assign("data",$data);
        $this->display();
    }
 

{$vo.name}

{$vo.info}

编辑
|删除



{$v.name}

{$v.info}

编辑
|删除





    /**
     * 新增分类的方法
     */
    public function add(){
        if(IS_POST){  判断是否是post提交
/*
I('post.name','','addslashes');
I('post.p_id',0,'int');
I('post.img','','addslashes');
I('post.info','','addslashes');
*/ 用I方法接收post穿过来的每个值,如果post提交的数据很多,就很麻烦,而且每个都要接收,要写很多次,所以tp框架有个create方法,用来自动创建数据(前提是form表单里面的name值和数据库里面的字段相同)
/*
$cate = M('cate');
$cate->create();//自动根据$_POST创建数据(创建成数组) 创建失败会自动返回错误
$cate->getError();//这个可以获取创建失败时的错误信息

自动验证  查找手册  然后将找到的数组放在 model里面  (属性)  看上面
*/
            $cate = D("cate");  //如果有字段验证,那么实例化表就要用D方法 会自动去验证
            if($cate->create()){//自动根据$_POST创建数据
                if($cate->add()){ 
//add方法是新增方法,如果不传参数 它会默认把你创建后的数据做新增操作
                    $this->success("新增成功",U("Cate/index"));
                }else{
                    $this->error("新增失败",U("Cate/index"));
                }
            }else{
                $this->error($cate->getError(),U("Cate/index"));//这个可以获取创建失败时的错误信息
            }
        }else{
            //我们新增分类之前 需要查询以前已有的一级分类  (先查询)
            //先实例化一个model类
            $cate = D("Cate");
            $data = $cate->get_list();
            $this->assign("data",$data);
            $this->display();
        }
    }
将add.html放在Cate文件夹下面,然后将该删掉的删掉就可以了

----------------
在添加分类图标的时候,将插件放在admin->common 里面, 找到文件上传插件mydemo->image-dialog.html
将里面head标签里面的js和css全部复制放在add.html里面 放在加载jquery的后面
由于jquery加载过了,所以不需要再次加载,将复制过来的加载jquery的删掉 
然后修改路径 
然后将mage-dialog.html 里面图片上传的 (只复制一个)



放在

分类图标 :




然后改变name='img'  --》测试就可以了
------------
最后是

分类描述 :




---------------

function check_form(){
    var name = $("input[name='name']").val();
    if($.trim(name)==""){
        alert("请填写分类的名字");
        return false;
    }
    var img = $("input[name='img']").val();
    if($.trim(img)==""){
        alert("请上传分类的图标");
        return false;
    }
    var info = $("textarea").val();
    if($.trim(info)==""){
        alert("请填写分类的描述");
        return false;
    }
}
然后就可以做添加功能了
分类的查询:
蔬菜
茎叶类蔬菜
瓜类
种子类蔬菜
水果
葡萄类
坚果类


    /**
     * ajax删除分类的方法
     */
 
删除
function del(id){
    if(confirm("确认删除这个分类?")){
        $.post("{:U('Cate/del')}",{id:id},function(data){
            if(data == -3){
                alert("该分类下面存在其他分类,请先删除其他分类");
            }else if(data == -2){
                alert("非法请求");
            }else if(data == -1){
                alert("该分类下面存在商品,请先修改商品分类再删除");
            }else if(data == 0){
                alert("删除失败,请刷新后重试");
                window.location.reload();//刷新
            }else if(data == 1){
                $("#tr"+id).remove();//直接把删除的移除掉   给每个tr一个id
            }
        })
    }
}
    public function del(){
        if(IS_AJAX){
            $id = I("post.id",0,"int");
            //先确认是否有商品在这个分类下面
            $goods = M("goods");
            $data1 = $goods->where("cate_id=".$id)->find();
            if($data1){ //该分类下面有商品
                echo -1;//表示该分类下面商品不能删除    
            }else{
                //确认这个分类下面是否有其他小分类
                $cate = M('cate');
                $data2 = $cate->where("p_id=".$id)->find();
                if($data2){ //该分类下面有小分类
                    echo -3;
                }else{
                    if($cate->where("id=".$id)->delete()){
                        echo 1;
                    }else{
                        echo 0;
                    }
                }
            }
        }else{
            echo -2;//如果返回-2,表示请求方式错误  
//$this->ajaxReturn($data);  tp的ajax返回值(也可以用echo )
        } 
        exit;
    }


    /**
     * 修改分类的方法
     */
编辑
在U放里面传参
U('控制器/方法',array('键1'=>'值1','键2'=>'值2'))
    public function edit(){
        if(IS_POST){
            $id = I("post.id",0,"int");  //因为id后面要使用,所以不能放在create里面去自动创建
            $cate = D("cate");
            if($cate->create()){//自动根据$_POST创建数据
                if($cate->where("id=".$id)->save()!==false){ //save()是保存方法
//save()是保存方法  成功的话返回的是受影响的行数   失败的话返回的是false
                    $this->success("修改成功",U("Cate/index"));
                }else{
//$cate->getLastSql(); exit;  //获取最后一次的sql语句 

                    $this->error("修改失败",U("Cate/index"));
                }
            }else{               $this->error($cate->getError(),U("Cate/index"));//这个可以获取创建失败时的错误信息
            }
        }else{
//先查询以前的数据
            $id = I("get.id",0,"int");
            $cate = D("cate");
            $data = $cate->where("id=".$id)->find();  //查询当前
            $cate_data = $cate->get_list(); //查询顶级
            $this->assign("data",$data);
            $this->assign("cate_data",$cate_data);
            $this->display();
        }
    }
}




条件 :eq 等于  lt 小于   gt 大于   neq 不等于


M和D方法的区别:
D方法实例化有模型的类 model下面的类文件
M方法直接实例化数据表
0==false  正确的
0 === false 错误的
0!=false 错误的
0!==false正确的
添加
$对象->create();如果不传参数,将会默认使用$_POST  $对象->create($data);把$data根据对象数据表的字段自动创建键值对
$对象->add();
查询
$对象->find();查询一条符合条件的数据  返回一维数组
$对象->select();查询所有符合条件的数据  返回多维数组
删除
$对象->where(条件)->delete();
修改
$对象->create();如果不传参数,将会默认使用$_POST  $对象->create($data);把$data根据对象数据表的字段自动创建键值对
$对象->save();
在修改的时候我们使用$对象->save()!==false 来进行判断

你可能感兴趣的:(php,开发应用)