TP电商项目:商品扩展类的添加

需求分析:

一件商品可以同时属于多个扩展分类,搜索任何一个分类都可以搜索出这件商品

第一步 建表

//扩展分类表

create table p39_goods_cat(

cat_id  mediumint unsigned not null  comment '分类id',

goods_id  mediumint unsigned not null  comment '商品id',

key goods_id(goods_id),

key cat_id(cat_id)


)engine=InnoDB default charset=utf8 comment '商品的扩展分类 ';

第二步 将主分类的代码复制到扩展分类

<tr>

                <td class="label">扩展分类:</td>

                <td>

                    <select name="cat_id">

                    <option value="">选择分类</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>

如图所示:


第三步 添加一个按钮 点击一次克隆一个扩展分类的下拉框

<tr>

                <td class="label">扩展分类:<input

onclick="$('#cat_list').append($('#cat_list').find('select').eq(0).clone());"


 type="button" id="btn_add_cat" value="添加一个"/></td>

                <td>

                    <select name="cat_id">

                    <option value="">选择分类</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>

修改为:

<tr>

                <td class="label">扩展分类:<input type="button" onclick="$('#cat_list').append($('#cat_list').find('li').eq(0).clone());"    id="btn_add_cat" value="添加一个"/></td>

                <td >

                    <ul  id="cat_list"  >

                        <li>

                    <select name="ext_cat_id[]">

                    <option value="">选择分类</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>

                        </li>

                    </ul>


                </td>

            </tr>

如图所示:


第四步  在修改商品模型,在商品添加之后,获取商品的ID再接收表单中的扩展分类ID数组插入到分类表

protected function _after_insert($data,$option){

        $ecid=I('post.ext_cat_id');

        if($ecid)

        {

            $gcModel=D('goods_cat');

            foreach($ecid as $k=>$v){

                if(empty($v))

                    continue;

                $gcModel->add(array(

                    'cat_id'=>$v,

                    'goods_id'=>$data['id'],


                ));

            }


        }

第五步 在商品列表中再添加一列:“扩展分类名称”

修改商品模型search方法

public function search($perPage=5){

        //取出总的记录数

//echo 1;

//echo "<br/>";

        $count=$this->where($where)->count();

        //echo $count;

        ////搜索页

        $where=array();

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

        if($gn) {

        $where['a.goods_name']=array('like',"%$gn%");}//

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

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

        if($fp&&$tp){

            $where['a.shop_price']=array('between',array($fp,$tp));

        }

        elseif ($fp) {

            $where['a.shop_price']=array('egt',$fp);


        }elseif ($tp) {

              $where['a.shop_price']=array('elt',$tp);

        }

        //添加时间

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

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

          if($fa && $ta){

            $where['a.addtime']=array('between',array($fa,$ta));

        }

        elseif ($fa) {

            $where['a.addtime']=array('egt',$fa);


        }elseif ($ta) {

              $where['a.addtime']=array('elt',$ta);

        }

        $brandId=I('get.brand_id');

        if($brandId){

        $where['a.brand_id']=array('eq',$brandId);}

        $catId=I('get.cat_id');

          if($catId){

              $catModel=D('category');

              $children=$catModel->getChildren($catId);

              $children[]=$catId;

            $where['a.cat_id']=array('IN',$children);

          }

        //是否上架

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

        if($ios){


            $where['a.is_on_sale']=array('eq',$ios);

        }


        //生成翻页类的对象

        $pageObj=new \Think\Page($count,$perPage);

          $pageObj->setConfig('next','下一页');

                  $pageObj->setConfig('prev','上一页');

        //生成页面显示的上一页,下一页的字符串

        $pageString=$pageObj->show();

        /***************** 排序 *****************/

$orderby = 'a.id';      // 默认的排序字段

$orderway = 'desc';  // 默认的排序方式

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

if($odby)

{

if($odby == 'id_asc')

$orderway = 'asc';

elseif ($odby == 'price_desc')

$orderby = 'shop_price';

elseif ($odby == 'price_asc')

{

$orderby = 'shop_price';

$orderway = 'asc';

}

}




        //取数据

        $data=$this->order("$orderby $orderway")


              ->field('a.*,b.brand_name,c.cat_name,e.ext_cat_name')

              ->alias('a')

              // ->join('LEFT JOIN p39_brand b ON a.brand_id=b.id')

                ->join('LEFT JOIN __BRAND__ b ON a.brand_id=b.id

                          LEFT JOIN __CATEGORY__ c ON a.cat_id=c.id

                          LEFT JOIN __GOODS_CAT__ d  ON a.id=d.goods_id

                          LEFT JOIN __CATEGORY__ e ON d.cat_id=e.id


')

                ->where($where)

                ->limit($pageObj->firstRow.','.$pageObj->listRows)

                ->select();

        // print_r($data);

        return array(

          'data'=>$data,

            'page'=>$pageString,

        );

    }

如图所示:


解决办法‘:

分组

$data=$this->order("$orderby $orderway")


              ->field('a.*,b.brand_name,c.cat_name,e.cat_name ext_cat_name')

              ->alias('a')

              // ->join('LEFT JOIN p39_brand b ON a.brand_id=b.id')

                ->join('LEFT JOIN __BRAND__ b ON a.brand_id=b.id

                          LEFT JOIN __CATEGORY__ c ON a.cat_id=c.id

                          LEFT JOIN __GOODS_CAT__ d  ON a.id=d.goods_id

                          LEFT JOIN __CATEGORY__ e ON d.cat_id=e.id


')

                ->where($where)

                ->group('a.id')

                ->limit($pageObj->firstRow.','.$pageObj->listRows)

                ->select();



运用一个函数:

GROUP_CONCAT

$data=$this->order("$orderby $orderway")


              ->field('a.*,b.brand_name,c.cat_name,GROUP_CONCAT(e.cat_name) ext_cat_name')

              ->alias('a')

              // ->join('LEFT JOIN p39_brand b ON a.brand_id=b.id')

                ->join('LEFT JOIN __BRAND__ b ON a.brand_id=b.id

                          LEFT JOIN __CATEGORY__ c ON a.cat_id=c.id

                          LEFT JOIN __GOODS_CAT__ d  ON a.id=d.goods_id

                          LEFT JOIN __CATEGORY__ e ON d.cat_id=e.id


')


扩展:

使用SEPARATOR

->field('a.*,b.brand_name,c.cat_name,GROUP_CONCAT(e.cat_name SEPARATOR "<br/>") ext_cat_name')


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容