ThinkPHP3.2电商搜索页开发思路

第一步  形象化思考从视图开始考虑,因为比较容易看到,所以搭建一个视图的搜索页如图所示:


思路如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>ECSHOP 管理中心 - 添加新商品 </title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<link href="__PUBLIC__/Admin/Styles/general.css" rel="stylesheet" type="text/css" />

<link href="__PUBLIC__/Admin/Styles/main.css" rel="stylesheet" type="text/css" />

</head>

<body>


  <div class="form-div">

    <form action="__ACTION__" method="GET" name="searchForm">

<P>

商品名称:

<input value="<?php echo I('get.gn'); ?>" type="text" name="gn" size="60" />

</P>

<P>

价  格:

从<input value="<?php echo I('get.fp'); ?>" type="text" name="fp" size="8" />

到<input value="<?php echo I('get.tp'); ?>" type="text" name="tp" size="8" />

</P>

<P>

是否上架:

<?php $ios = I('get.ios'); ?>

<input type="radio" name="ios" value="" <?php if($ios == '') echo 'checked="checked"'; ?> /> 全部

<input type="radio" name="ios" value="是" <?php if($ios == '是') echo 'checked="checked"'; ?> /> 上架

<input type="radio" name="ios" value="否" <?php if($ios == '否') echo 'checked="checked"'; ?> /> 下架

</P>

<P>

添加时间:

从<input type="text" id="fa" name="fa" value="<?php echo I('get.fa'); ?>" size="20" />

到<input type="text" id="ta" name="ta" value="<?php echo I('get.ta'); ?>" size="20" />

</P>

<p>

排序方式:

<?php  $obdy = I('get.odby', 'id_desc'); // 如果odby为空,那么默认是id_desc  ?>

<input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="id_desc" <?php if($obdy == 'id_desc') echo 'checked="checked"'; ?> /> 以添加时间降序

<input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="id_asc" <?php if($obdy == 'id_asc') echo 'checked="checked"'; ?> /> 以添加时间升序

<input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="price_desc" <?php if($obdy == 'price_desc') echo 'checked="checked"'; ?> /> 以价格降序

<input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="price_asc" <?php if($obdy == 'price_asc') echo 'checked="checked"'; ?> /> 以价格升序

</p>

<P>

<input type="submit" value="搜索" />

</P>

    </form>

</div>



<div class="tab-div">

   <form method="post" action="" name="listForm" onsubmit="">

    <div class="list-div" id="listDiv">

        <table cellpadding="3" cellspacing="1">

            <tr>

                <th>编号</th>

                <th>商品名称</th>

                <th>logo</th>

                <th>市场价格</th>

                <th>本店价格</th>

                <th>上架</th>

                <th>添加时间</th>

                <th>操作</th>

            </tr>

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

            <tr class="tron">

                <td align="center"><?php echo $v['id']; ?></td>

                <td align="center" class="first-cell"><span><?php echo $v['goods_name']; ?></span></td>

                <td align="center"><img src="/Public/Uploads/<?php echo $v['sm_logo'];?>"/></td>

                <td align="center"><?php echo $v['market_price']; ?></td>

                <td align="center"><?php echo $v['shop_price']; ?></td>

                <td align="center"><?php echo $v['is_on_sale']; ?></td>

                <td align="center"><?php echo $v['addtime']; ?></td>

                <td align="center">

                <a href="<?php echo U('edit?id='.$v['id']); ?>">修改</a>

                <a onclick="return confirm('确定要删除吗?');" href="<?php echo U('delete?id='.$v['id']); ?>">删除</a>

               </td>

            </tr>

            <?php endforeach; ?>

        </table>


    <!-- 分页开始 -->

        <table id="page-table" cellspacing="0">

            <tr>

                <td width="80%">&nbsp;</td>

                <td align="center" nowrap="true">

                    <?php echo $page; ?>

                </td>

            </tr>

        </table>

    <!-- 分页结束 -->

    </div>

</form>

</div>



</body>

</html>


<!--导入在线编辑器 -->

<link href="__PUBLIC__/umeditor1_2_2-utf8-php/themes/default/css/umeditor.css" type="text/css" rel="stylesheet">

<script type="text/javascript" src="__PUBLIC__/umeditor1_2_2-utf8-php/third-party/jquery.min.js"></script>

<script type="text/javascript" charset="utf-8" src="__PUBLIC__/umeditor1_2_2-utf8-php/umeditor.config.js"></script>

<script type="text/javascript" charset="utf-8" src="__PUBLIC__/umeditor1_2_2-utf8-php/umeditor.min.js"></script>

<script type="text/javascript" src="__PUBLIC__/umeditor1_2_2-utf8-php/lang/zh-cn/zh-cn.js"></script>

<link href="__PUBLIC__/datetimepicker/jquery-ui-1.9.2.custom.min.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" charset="utf-8" src="__PUBLIC__/datetimepicker/jquery-ui-1.9.2.custom.min.js"></script>

<script type="text/javascript" charset="utf-8" src="__PUBLIC__/datetimepicker/datepicker-zh_cn.js"></script>

<link rel="stylesheet" media="all" type="text/css" href="__PUBLIC__/datetimepicker/time/jquery-ui-timepicker-addon.min.css" />

<script type="text/javascript" src="__PUBLIC__/datetimepicker/time/jquery-ui-timepicker-addon.min.js"></script>

<script type="text/javascript" src="__PUBLIC__/datetimepicker/time/i18n/jquery-ui-timepicker-addon-i18n.min.js"></script>

细节我们就不深究,具体你可以参考ecshop的做法

第二步 我们先想像要再哪里可以展示视图,应该是在控制器,所以我们可以假定,有一个函数

命名为lst,说再控制器里展示

代码如下:

<?php

namespace Admin\Controller;

use Think\Controller;

class GoodsController extends Controller {

  public  function add(){

      if(IS_POST){

          $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);




      }

      //显示表单




      $this->display();

}

public function lst(){

    //商品列表页

    $model=D('goods');

$data=$model->search();

/*这个方法只是我们假定它执行了,但具体落实,我们还需在模型中定义*/

$this->assign($data);

  $this->display();

}

}

第三步 考虑模型中函数

<?php

namespace Admin\Model;

use Think\Model;

class GoodsModel extends Model{

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

    //定义验证规则

/*

评:我们发现,抗日神剧里面有个桥段,就是日本人为检验你是不是中共特务,第一句台词:哟西哟西,你的,大大叫什么?其实程序上验证规则也是这样,验证这商品名称是不是空,验证市场价格是不是人民币?(最近看郭富城的《无双》造假币的故事)

*/

    protected  $_validate=array(

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

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

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

    );

    //钩子方法:添加之前会自动调用

    protected  function _before_insert(&$data, $options) {

        //获取当前时间

  $data['addtime']= date('Y-m-d H:i:s',  time());


  $data['goods_desc']=  removeXSS($_POST['goods_desc']);

  if($_FILES['logo']['error']==0){

      $upload=new \Think\Upload();//

      $upload->maxsize=1024*1024;

      $upload->exts=array('jpg','gif','png','jpeg');

      $upload->rootPath='./Public/Uploads/';

      $upload->savePath='Goods/';

      $info=$upload->upload();

      if(!$info){

          $this->error($upload->getError());

          return FALSE;

      }else{

        /**************** 生成缩略图 *****************/

    // 先拼成原图上的路径

    $logo = $info['logo']['savepath'] . $info['logo']['savename'];

    // 拼出缩略图的路径和名称

    $mbiglogo = $info['logo']['savepath'] .'mbig_'. $info['logo']['savename'];

    $biglogo = $info['logo']['savepath'] .'big_'. $info['logo']['savename'];

    $midlogo = $info['logo']['savepath'] .'mid_'. $info['logo']['savename'];

    $smlogo = $info['logo']['savepath'] .'sm_'. $info['logo']['savename'];

    $image = new \Think\Image();

    // 打开要生成缩略图的图片

    $image->open('./Public/Uploads/'.$logo);

    // 生成缩略图

    $image->thumb(700, 700)->save('./Public/Uploads/'.$mbiglogo);

    $image->thumb(350, 350)->save('./Public/Uploads/'.$biglogo);

    $image->thumb(130, 130)->save('./Public/Uploads/'.$midlogo);

    $image->thumb(50, 50)->save('./Public/Uploads/'.$smlogo);

    /**************** 把路径放到表单中 *****************/

    $data['logo'] = $logo;

    $data['mbig_logo'] = $mbiglogo;

    $data['big_logo'] = $biglogo;

    $data['mid_logo'] = $midlogo;

    $data['sm_logo'] = $smlogo;



      }

  }

    }

    public function search($perPage=7){

/**你可能问我为什么要设置$perPage=7这样一个参数,他意思其实就是,就像《大江大河》里面的公布榜单,你不能说,我们把所有高考过的学生都往榜单上贴,而是考上的,而且可以贴得下的,都贴上去,可能是7个,也可能是5个所以就这意思,与我们在飞机场看航班就是一个道理**/

        //取出总的记录数

//echo 1;

//echo "<br/>";

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

        //echo $count;

        ////搜索页

        $where=array();

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

/*这就好比我们面试要填公司表格是一个道理

例如你要填姓名,所以你要在脑子获取你姓名的信息*/

        if($gn) {

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

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

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

        if($fp&&$tp){

/*期望薪资*/

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

        }

        elseif ($fp) {

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


        }elseif ($tp) {

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

        }

        //添加时间

/*入职时间*/

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

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

          if($fa && $ta){

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

        }

        elseif ($fa) {

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


        }elseif ($ta) {

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

        }

        //是否上架

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

        if($ios){


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

        }


        //生成翻页类的对象

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

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

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

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

        $pageString=$pageObj->show();

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

$orderby = '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")->where($where)->limit($pageObj->firstRow.','.$pageObj->listRows)->select();

评:这就好像,赵丽颖一部剧的桥段在填完她的入职表之后,我会用她给我的信息来评定她适合哪种岗位,只不过那部剧说得太神了。

*/

        $data=$this->order("$orderby $orderway")->where($where)->limit($pageObj->firstRow.','.$pageObj->listRows)->select();

        // print_r($data);

        return array(

          'data'=>$data,

            'page'=>$pageString,

        );

    }

}

?>

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