首页 > 代码库 > PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

商品列表页

1、翻页

控制器GoodsController.class.php添加方法lst(),显示列表页

技术分享

 在商品模型GoodsModel.class.php类中添加search方法

技术分享
/**
         *实现翻页、搜索、排序
         *
         */
        public function search($perPage = 5)    //$perPage控制显示条数
        {
            /***********翻页***********/
            //取出总的记录数
            $count = $this->count();
            //生成翻页类的对象
            $pageObj = new \Think\Page($count, $perPage);
            //设置样式
            $pageObj->setConfig(‘next‘, ‘下一页‘);
            $pageObj->setConfig(‘prev‘, ‘上一页‘);
            //生成页面下面显示的上一页、下一页的字符串
            $pageString = $pageObj->show();
            
            /**********取某一页的数据**********/
            $data = $this->limit($pageObj->firstRow.‘,‘.$pageObj->listRows)->select();

            
            /************返回数据*************/
            return array(
                ‘data‘ => $data,    //数据
                ‘page‘ => $pageString,    //翻页字符串
            );
        }
function search()

 创建lst静态页 

技术分享
<!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="http://www.mamicode.com/__PUB__/Admin/Styles/general.css" rel="stylesheet" type="text/css" />
<link href="http://www.mamicode.com/__PUB__/Admin/Styles/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>
    <span class="action-span"><a href="http://www.mamicode.com/__GROUP__/Goods/goodsAdd">添加新商品</a></span>
    <span class="action-span1"><a href="http://www.mamicode.com/__GROUP__">ECSHOP 管理中心</a></span>
    <span id="search_id" class="action-span1"> - 商品列表 </span>
    <div style="clear:both"></div>
</h1>
<!--搜索表单【基本都是get】-->
    <!--name的名称自取,get提交时会把name值提交到对应的模型类处理-->
    <!--为了在搜索后的表单中显示搜索内容,通过<I(get.))>从get传参中获取响应的值到value-->
<div class="form-div">
    <form action="__SELF__" name="searchForm" method="GET">
        <p>
            商品名称:
            <input value="http://www.mamicode.com/<?php echo I(‘get.gn‘);?>" type="text" name="gn" size="40" />
        </p>
        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格:
            从<input value="http://www.mamicode.com/<?php echo I(‘get.fp‘);?>" type="text" name="fp" size="8" /><input value="http://www.mamicode.com/<?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="http://www.mamicode.com/1" <?php if($ios == ‘1‘) echo ‘checked="checked"‘; ?> />上架
            <input type="radio" name="ios" value="http://www.mamicode.com/0"<?php if($ios == ‘0‘) echo ‘checked="checked"‘; ?> />下架
        </p>
        <p>
            添加时间:
            从<input type="text" name="fa" value="http://www.mamicode.com/<?php echo I(‘get.fa‘);?>" size="15"/><input type="text" name="ta" value="http://www.mamicode.com/<?php echo I(‘get.ta‘);?>" size="15"/>
        </p>
        <p>
            <input type="submit" value="http://www.mamicode.com/搜索" />
        </p>
    </form>
</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>
                <td align="center"><?php echo $v[‘id‘]; ?></td>
                <td align="center" class="first-cell"><span><?php echo $v[‘name‘]; ?></span></td>
                <td align="center"><img src="http://www.mamicode.com/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 if($v[‘is_on_sale‘]==1){echo ‘是‘;}else{echo ‘否‘;} ?></td>
                <td align="center"><?php echo $v[‘addtime‘]; ?></td>
                <td align="center">
                    <a href="">修改</a>
                    <a href="">删除</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 id="footer">
共执行 7 个查询,用时 0.028849 秒,Gzip 已禁用,内存占用 3.219 MB<br />
版权所有 &copy; 2005-2012 上海商派网络科技有限公司,并保留所有权利。</div>
</body>
</html>
lst.html

 因为本例没使用到页面模版标签,所以动态输出数据需用php输出

技术分享

 页面美化CSS,通过标签定位

技术分享

2、搜索功能本质:构造where条件

在lst.html中添加搜索表单

注:搜索表单一般使用get提交在自身,tp自然会调用模型类进行处理;为使点击搜索后,在更新页面的搜索表单中显示原搜索内容,可通过<I(‘get.XXX‘)>从链接中获取

技术分享
<!--搜索表单【基本都是get】-->
    <!--name的名称自取,get提交时会把name值提交到对应的模型类处理-->
    <!--为了在搜索后的表单中显示搜索内容,通过<I(get.))>从get传参中获取响应的值到value-->
<div class="form-div">
    <form action="__SELF__" name="searchForm" method="GET">
        <p>
            商品名称:
            <input value="http://www.mamicode.com/<?php echo I(‘get.gn‘);?>" type="text" name="gn" size="40" />
        </p>
        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格:
            从<input value="http://www.mamicode.com/<?php echo I(‘get.fp‘);?>" type="text" name="fp" size="8" /><input value="http://www.mamicode.com/<?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="http://www.mamicode.com/1" <?php if($ios == ‘1‘) echo ‘checked="checked"‘; ?> />上架
            <input type="radio" name="ios" value="http://www.mamicode.com/0"<?php if($ios == ‘0‘) echo ‘checked="checked"‘; ?> />下架
        </p>
        <p>
            添加时间:
            从<input type="text" name="fa" value="http://www.mamicode.com/<?php echo I(‘get.fa‘);?>" size="15"/><input type="text" name="ta" value="http://www.mamicode.com/<?php echo I(‘get.ta‘);?>" size="15"/>
        </p>
        <p>
            <input type="submit" value="http://www.mamicode.com/搜索" />
        </p>
    </form>
</div>
搜索表单 

    修改商品模型GoodsModel.class.php根据提交的条件来取数据

   先从页面中获取get提交的数据,拼接where语句,注意在读取数据条数$count和读取数据时,要加上该where条件{where($where)}

技术分享

技术分享
        public function search($perPage = 5)    //$perPage控制显示条数
        {
            /***********搜索(获取get提交的数据)************/
            $where =array();    //空的where条件
                //商品名称
            $gn = I(‘get.gn‘);
            if($gn)
                $where[‘goods_name‘] = array(‘like‘, "%$gn%");    //WHERE goods_name LIKE ‘%$gn%‘
                //市场价格
            $fp = I(‘get.fp‘);
            $tp = I(‘get.tp‘);
            if($fp && $tp)
                $where[‘shop_price‘] = array(‘between‘, array($fp, $tp));    //WHERE shop_price BETWEEN $fp AND $tp
            elseif($fp)
                $where[‘shop_price‘] = array(‘egt‘, $fp);    //WHERE shop_price >= $fp
            elseif($tp)
                $where[‘shop_price‘] = array(‘elt‘, $tp);    //WHERE shop_price <= $tp
                //是否上架
            $ios = I(‘get.ios‘);
            if($ios)
                $where[‘is_on_sale‘] = array(‘eq‘, $ios);    //WHERE is_on_sale = $ios
                //添加时间
            $fa = I(‘get.fa‘);
            $ta = I(‘get.ta‘);
            if($fa && $ta)
                $where[‘addtime‘] = array(‘between‘, array($fa, $ta));    //WHERE addtime BETWEEN $fa ADD $ta
            elseif($fa)
                $where[‘addtime‘] = array(‘egt‘, $fa);    //WHERE addtime >= $fa
            elseif($ta)
                $where[‘addtime‘] = array(‘elt‘, $ta);    //WHERE addtime <= $ta
                
            /***********翻页***********/
                //取出总的记录数
            $count = $this->where($where)->count();
                //生成翻页类的对象
            $pageObj = new \Think\Page($count, $perPage);
                //设置样式
            $pageObj->setConfig(‘next‘, ‘下一页‘);
            $pageObj->setConfig(‘prev‘, ‘上一页‘);
                //生成页面下面显示的上一页、下一页的字符串
            $pageString = $pageObj->show();
            
            
            /**********取某一页的数据**********/
            $data = $this->where($where)->limit($pageObj->firstRow.‘,‘.$pageObj->listRows)->select();
            
            /************返回数据*************/
            return array(
                ‘data‘ => $data,    //数据
                ‘page‘ => $pageString,    //翻页字符串
            );
        }
search()

 注意:在搜索时有个bug:只显示原搜索页面,搜索的数据若不在原搜索页之后的话,无法显示【即在第2页搜索,无法显示第1页数据】

  __SELF__:意思是你当前页面的地址  http://www.test_shop.com/index.php/Admin/Goods/lst/p/2.html;

  应该改为__ACTION__当前操作的URL地址  http://www.test_shop.com/index.php/Admin/Goods/lst

技术分享

 

3、排序{添加时间与id同增同减}

  在lst.html搜索的表单中添加几个排序按钮{点击提交onclick="this.parentNode.parentNode.submit();}

技术分享
<p>
            排序方式:
            <?php $odby = I(‘get.odby‘, ‘id_desc‘);        //如果odby为空,那么默认是‘id_desc‘?>
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="http://www.mamicode.com/id_desc" <?php if($odby == ‘id_desc‘) echo ‘checked="checked"‘;?> />以添加时间降序
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="http://www.mamicode.com/id_asc" <?php if($odby == ‘id_asc‘) echo ‘checked="checked"‘;?> />以添加时间升序
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="http://www.mamicode.com/price_desc" <?php if($odby == ‘price_desc‘) echo ‘checked="checked"‘;?> />以价格降序
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="http://www.mamicode.com/price_asc" <?php if($odby == ‘price_asc‘) echo ‘checked="checked"‘;?> />以价格升序
        </p>
排序html

    修改商品模型GoodsModel.class.php根据odby变量排序,在取出数据前

技术分享

 

 

PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序