[PHP] 商品类型规格属性后台管理(代码流程备忘)详解编程语言

实现界面

[PHP] 商品类型规格属性后台管理(代码流程备忘)详解编程语言

 

涉及到四张表,type(商品类型表),type_spec(商品类型规格关联表),attribute(商品属性表),attribute_value(商品属性值表)

 

新建基控制器BaseController.class.php,向上抽取出来的公用方法

BaseController.class.php

<?php 
namespace Admin/Controller; 
use Think/Controller; 
class BaseController extends Controller { 
    protected $pageSize=1; 
    /** 
     * 获取分页对象 
     * @param  [type] $count [description] 
     * @return [type]        [description] 
     */ 
    public function getPager($count){ 
        $pager=new /Common/Libs/MyPage($count,$this->pageSize); 
        return $pager; 
    } 
}

 

定义基模型文件BaseModel.class.php,继承系统的Model类

BaseModel.class.php

<?php 
namespace Common/Model; 
use Think/Model; 
class BaseModel extends Model{ 
    /** 
     * 获取分页数据 
     * @param  [type] $pager     [description] 
     * @param  array  $condition [description] 
     * @param  string $order     [description] 
     * @return [type]            [description] 
     */ 
    public function getPagerResult($pager,$condition=array(),$order=""){ 
        if($pager==null){ 
            return; 
        } 
        return $this->where($condition) 
                    ->limit($pager->firstRow.','.$pager->listRows) 
                    ->order($order) 
                    ->select(); 
    } 
    /** 
     * 获取条数 
     * @return [type] [description] 
     */ 
    public function getCount($condition=array()){ 
        return $this->where($condition)->count(); 
    } 
    /** 
     * 添加数据 
     * @return [type] [description] 
     */ 
    public function addItem($data){ 
        $msg=array(); 
        if(!$this->create($data)){ 
            $msg['msg']=$this->getError(); 
            $msg['status']=false; 
        }else{ 
            $id=$this->add($data); 
            if($id){ 
                $msg['status']=true; 
                $msg['id']=$id; 
            }else{ 
                $msg['status']=false; 
                $msg['msg']=$this->getError(); 
            } 
        } 
        return $msg; 
    } 
    /** 
     * 获取单条数据 
     * @return [type] [description] 
     */ 
    public function getItem($condition=array()){ 
        return $this->where($condition)->find(); 
    } 
    /** 
     * 获取所有数据 
     * @return [type] [description] 
     */ 
    public function getAllResult($condition=array()){ 
        return $this->where($condition)->select(); 
    } 
    /** 
     * 删除数据 
     * @return [type] [description] 
     */ 
    public function delItem($condition=array()){ 
        if(empty($condition)){ 
            return false; 
        } 
        return $this->where($condition)->delete(); 
    } 
    /** 
     * 编辑数据 
     * @return [type] [description] 
     */ 
    public function setItem($condition=array(),$data){ 
        if(empty($condition)){ 
            return false; 
        } 
        $msg=array(); 
        if(!$this->create($data)){ 
            $msg['msg']=$this->getError(); 
            $msg['status']=false; 
        }else{ 
            $id=$this->where($condition)->save($data); 
            $msg['status']=true; 
            $msg['id']=$id; 
        } 
        return $msg; 
    } 
}

 

新建类型控制器文件TypeController.class.php

TypeController.class.php

<?php 
namespace Admin/Controller; 
use Think/Controller; 
/** 
 * 类型(规格,属性) 
 */ 
class TypeController extends BaseController { 
    private $typeModel; 
    private $specModel; 
    private $attrModel; 
    private $typeId; 
    public function __construct(){ 
        parent::__construct(); 
        $this->typeModel=D("Type"); 
        $this->specModel=D("Spec"); 
        $this->attrModel=D("Attr"); 
    } 
    /** 
     * 列表 
     * @return [type] [description] 
     */ 
    public function index(){ 
        $nums=$this->typeModel->getCount(); 
        $pager=$this->getPager($nums); 
        $typeList=$this->typeModel->getPagerResult($pager,array(),"type_id desc"); 
        $pageHtml=$pager->show(); 
 
        $this->assign('typeList',$typeList); 
        $this->assign('pageHtml',$pageHtml); 
        $this->display(); 
    } 
    /** 
     * 添加类型(添加进4张表 type,type_spec,attribute,attribute_value) 
     * @return [type] [description] 
     */ 
    public function addType(){ 
        if(IS_POST){ 
            //添加类型表 
            $res=$this->typeModel->addTypeItem($_POST); 
            if($res['status']){ 
                $this->typeId=$res['id']; 
                //添加属性 
                if($_POST['attr_value'][0]['name']){ 
                    $this->addAttrData($_POST['attr_value']); 
                } 
                $this->success("操作成功!"); 
            }else{ 
                $this->error($res['msg']); 
            } 
        }else{ 
            $specList=$this->specModel->select(); 
            $this->assign("specList",$specList); 
            $this->display();  
        } 
    } 
    /** 
     * 添加属性 
     * @param [type] $data [description] 
     */ 
    private function addAttrData($data){ 
        foreach ($data as $key => $value) { 
            $temp=array(); 
            $temp['attr_name']=$value['name']; 
            $temp['attr_values']=$value['value']; 
            $temp['type_id']=$this->typeId; 
            $this->attrModel->addAttrItem($temp); 
        } 
        return true; 
    } 
    /** 
     * 编辑属性 
     * @param [type] $data [description] 
     */ 
    private function setAttrData($data){ 
        foreach ($data as $key => $value) { 
            $temp=array(); 
            $temp['attr_id']=$key; 
            $temp['attr_name']=$value['name']; 
            $temp['attr_values']=$value['value']; 
            $temp['type_id']=$this->typeId; 
            $this->attrModel->setAttrItem($temp); 
            //添加属性 
            if($key=='new'){ 
                $this->addAttrData($value); 
                break; 
            } 
        } 
        return true; 
    } 
    /** 
     * 编辑类型(添加进4张表 type,type_spec,attribute,attribute_value) 
     * @return [type] [description] 
     */ 
    public function editType(){ 
        $typeId=intval($_GET['typeId']); 
         
        if(IS_POST){ 
            $this->typeId=intval($_POST['type_id']); 
            //编辑类型表 
            $res=$this->typeModel->editTypeItem($_POST); 
            if($res['status']){ 
                //编辑属性 
                if(!empty($_POST['attr_value'])){ 
                    $this->setAttrData($_POST['attr_value']); 
                } 
                $this->success("操作成功!",U("Type/editType",array('typeId'=>$this->typeId))); 
            }else{ 
                $this->error($res['msg']); 
            } 
        }else{ 
            $typeInfo=$this->typeModel->getItem(array('type_id'=>$typeId)); 
            $this->assign("typeInfo",$typeInfo); 
 
            $specList=$this->specModel->select(); 
            $this->assign("specList",$specList); 
 
            $specTypeList=M("type_spec")->where(array('type_id'=>$typeId))->getField("spec_id",true); 
            $this->assign("specTypeList",$specTypeList); 
 
            $attrList=$this->attrModel->getAllResult(array('type_id'=>$typeId)); 
            $this->assign("attrList",$attrList); 
 
            $this->display();  
        } 
    } 
}

 

新建类型模型文件TypeModel.class.php

TypeModel.class.php

<?php 
namespace Common/Model; 
use Think/Model; 
class TypeModel extends BaseModel{ 
    /** 
     * 验证规则 
     * @var array 
     */ 
    protected $_validate = array( 
        array('type_name','require','类型名称必须!') 
    ); 
    /** 
    * 添加类型 
    */ 
    public function addTypeItem($data){ 
        $res=$this->addItem($data); 
 
        //添加类型规格 
        $typeSpecs=$data['spec_id']; 
        $typeSpecArray=array(); 
        foreach ($typeSpecs as $typeSpec) { 
            $temp=array(); 
            $temp['type_id']=$res['id']; 
            $temp['spec_id']=$typeSpec; 
            $typeSpecArray[]=$temp; 
        } 
         
        M("type_spec")->addAll($typeSpecArray); 
        return $res; 
    } 
    /** 
    * 编辑类型 
    */ 
    public function editTypeItem($data){ 
        $res=$this->setItem(array('type_id'=>$data['type_id']),$data); 
 
        //编辑类型规格 
        M("type_spec")->where(array('type_id'=>$data['type_id']))->delete(); 
        $typeSpecs=$data['spec_id']; 
        $typeSpecArray=array(); 
        foreach ($typeSpecs as $typeSpec) { 
            $temp=array(); 
            $temp['type_id']=$data['type_id']; 
            $temp['spec_id']=$typeSpec; 
            $typeSpecArray[]=$temp; 
        } 
         
        M("type_spec")->addAll($typeSpecArray); 
 
        return $res; 
    } 
}

 

新建规格模型文件SpecModel.class.php

SpecModel.class.php

<?php 
namespace Common/Model; 
use Think/Model; 
class SpecModel extends BaseModel{ 
    /** 
     * 验证规则 
     * @var array 
     */ 
    protected $_validate = array( 
        array('spec_name','require','规格名称必须!'),  
        array('spec_sort','number','排序必须是数字!') 
    ); 
}

 

新建属性模型文件AttrModel.class.php

AttrModel.class.php

<?php 
namespace Common/Model; 
use Think/Model; 
class AttrModel extends BaseModel{ 
    protected $tableName="attribute"; 
    /** 
     * 验证规则 
     * @var array 
     */ 
    protected $_validate = array( 
        array('attr_name','require','属性名称必须!'), 
        array('type_id','require','类型id必须!'), 
        array('attr_values','require','属性值必须!') 
    ); 
    /** 
     * 添加属性 
     */ 
    public function addAttrItem($data){ 
        $res=$this->addItem($data); 
 
        //添加属性值 
        $attrValues=explode("|", $data['attr_values']); 
        $attrValueArray=array(); 
        foreach ($attrValues as $attrValue) { 
            $temp=array(); 
            $temp['attr_id']=$res['id']; 
            $temp['attr_value']=$attrValue; 
            $attrValueArray[]=$temp; 
        } 
         
        M("attribute_value")->addAll($attrValueArray); 
    } 
    /** 
     * 编辑属性 
     */ 
    public function setAttrItem($data){ 
        $res=$this->setItem(array('attr_id'=>$data['attr_id']),$data); 
 
        //编辑属性值 
        M("attribute_value")->where(array('attr_id'=>$data['attr_id']))->delete(); 
        $attrValues=explode("|", $data['attr_values']); 
        $attrValueArray=array(); 
        foreach ($attrValues as $attrValue) { 
            if(!$attrValue){ 
                break; 
            } 
            $temp=array(); 
            $temp['attr_id']=$data['attr_id']; 
            $temp['attr_value']=$attrValue; 
            $attrValueArray[]=$temp; 
        } 
         
        M("attribute_value")->addAll($attrValueArray); 
    } 
}

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12607.html

(0)
上一篇 2021年7月19日 14:45
下一篇 2021年7月19日 14:45

相关推荐

发表回复

登录后才能评论