前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[PHP] 商品类型规格属性后台管理(代码流程备忘)

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

作者头像
唯一Chat
发布2019-09-10 15:32:36
8110
发布2019-09-10 15:32:36
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

实现界面

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

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

BaseController.class.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档