TP电商项目:商品与分类的关系

需求分析:

1.一件商品必须属于一个主分类

荣耀 畅玩7X 4GB+32GB 全网通4G全面屏手机 标配版 极光蓝属于手机这个类

2.一件商品可以同时属于多个扩展分类

荣耀 畅玩7X 4GB+32GB 全网通4G全面屏手机 标配版 极光蓝 属于智能手机类,也属于拍照手机类

你是否知道一个更容易着手问题?

create table p39_goods

(

id mediumint unsigned not null auto_increment comment 'Id',

goods_name varchar(150) not null comment '商品名称',

market_price decimal(10,2) not null comment '市场价格',

shop_price decimal(10,2) not null comment '本店价格',

goods_desc longtext comment '商品描述',

is_on_sale enum('是','否') not null default '是' comment '是否上架',

is_delete enum('是','否') not null default '否' comment '是否放到回收站',

addtime datetime not null comment '添加时间',

logo varchar(150) not null default '' comment '原图',

sm_logo varchar(150) not null default '' comment '小图',

mid_logo varchar(150) not null default '' comment '中图',

big_logo varchar(150) not null default '' comment '大图',

mbig_logo varchar(150) not null default '' comment '更大图',

brand_id mediumint unsigned not null default '0' comment '品牌id',

cat_id mediumint unsigned not null default '0' comment '主分类Id',

primary key (id),

key shop_price(shop_price),

key addtime(addtime),

key brand_id(brand_id),

key cat_id(cat_id),

key is_on_sale(is_on_sale)

)engine=InnoDB default charset=utf8 comment '商品';

联想产品与品牌关系的做法,模仿其做法:

ALTER TABLE p39_goods ADD cat_id mediumint unsigned not null default '0' comment '主分类Id';

修改商品的表单添加一个主分类下拉框

商品控制器中取出分类数据:

从CategoryController中:

$model = D('category');

$catData=$model->getTree();

'catData'=>$catData

粘贴到Goods添加方法中

public function add(){

      if(IS_POST){

      // var_dump($_POST);

        //  die;

          $model =D('goods');

      if( $model->create(I('post.'),1)) {

          if($model->add()){

              //插入到数据库

              $this->success('操作成功',U('lst'));

              exit;

              //http://localhost:8989/php/TpShop/Admin/goods/add

          }


      } 

        $error=$model->getError();

        $this->error($error);




      }

      //显示表单


      //取出所有会员级别

      $mlModel=D('member_level');

      $mlData=$mlModel->select();

      $model = D('category');

      $catData=$model->getTree();

      //取出所有的品牌

      // $brandModel=D('brand');

      //$brandData=$brandModel->select();

    //  print_r($brandData);

      //

      $this->assign(array(

        //  'brandData'=>$brandData,

          'catData'=>$catData,

          'mlData'=>$mlData,

          '_page_title'=>'添加商品',

          '_page_btn_name'=>'商品列表',

          '_page_btn_link'=>U('lst'),

      ));

      $this->display();

}

从视图层复制代码至add.html

<tr>

                <td class="label">上级分类:</td>

                <td>

                    <select name="parent_id">

                    <option value="0">顶级分类</option>

                    <?php foreach ($catData as $k => $v): ?>

                    <option value="<?php echo $v['id']; ?>"><?php echo str_repeat('-', 8*$v['level']) . $v['cat_name']; ?></option>

                    <?php endforeach; ?>

                    </select>

                </td>

            </tr>

修改商品模型:类比以上做法

protected $insertFields='goods_name,market_price,shop_price,is_on_sale,goods_desc,brand_id,cat_id';

  //修改时调用create方法允许接收的字段

    protected  $updateFields='id,goods_name,market_price,shop_price,is_on_sale,goods_desc,brand_id,cat_id';

    //定义验证规则


    protected  $_validate=array(

        array('cat_id', 'require', '必须选择主分类!', 1),

      array('goods_name', 'require', '商品名称不能为空',1),

      array('market_price','currency','市场价格必须为货币类型',1),

      array('shop_price','currency','本店价格必须为货币类型',1),

    );

同理类比:

public function edit(){

      $id=I('get.id');

      $model =D('goods');


      if(IS_POST){


      if( $model->create(I('post.'),2)) {

          if(FALSE!==$model->save()){

              //插入到数据库

              $this->success('操作成功',U('lst'));

              exit;


          }


      } 

        $error=$model->getError();

        $this->error($error);




      }

      //显示表单


      $data=$model->find($id);

      $this->assign('data',$data);

          //取出所有的品牌

      // $brandModel=D('brand');

      // $brandData=$brandModel->select();

    //  print_r($brandData);

      // 取出所有的分类做下拉框

      $catModel = D('category');

    $catData = $catModel->getTree();

// 设置页面信息

$this->assign(array(

                      'catData' => $catData,

                      //  'brandData'=>$brandData,

'_page_title' => '修改商品',

'_page_btn_name' => '商品列表',

'_page_btn_link' => U('lst'),

));


      $this->display();

}

修改edit.html

<tr>

                <td class="label">上级分类:</td>

                <td>

                    <select name="cat_id">

                    <option value="0">顶级分类</option>

                    <?php foreach ($catData as $k => $v):

                    // 跳过当前分类和子分类

                    //if($v['id'] == $data['id'] || in_array($v['id'], $children))

                    //continue ;

                    if($v['id'] == $data['cat_id'])

                    $select = 'selected="selected"';

                    else

                    $select = '';

                    ?>

                    <option  <?php echo $select; ?> value="<?php echo $v['id']; ?>"><?php echo str_repeat('-', 8*$v['level']) . $v['cat_name']; ?></option>

                    <?php endforeach; ?>

                    </select>

                </td>

            </tr>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容