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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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="__PUB__/Admin/Styles/general.css" rel="stylesheet" type="text/css" />
<link href="__PUB__/Admin/Styles/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>
    <span class="action-span"><a href="__GROUP__/Goods/goodsAdd">添加新商品</a></span>
    <span class="action-span1"><a href="__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="<?php echo I(\'get.gn\');?>" type="text" name="gn" size="40" />
        </p>
        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格:
            从<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="1" <?php if($ios == \'1\') echo \'checked="checked"\'; ?> />上架
            <input type="radio" name="ios" value="0"<?php if($ios == \'0\') echo \'checked="checked"\'; ?> />下架
        </p>
        <p>
            添加时间:
            从<input type="text" name="fa" value="<?php echo I(\'get.fa\');?>" size="15"/><input type="text" name="ta" value="<?php echo I(\'get.ta\');?>" size="15"/>
        </p>
        <p>
            <input type="submit" value="搜索" />
        </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="/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="<?php echo I(\'get.gn\');?>" type="text" name="gn" size="40" />
        </p>
        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格:
            从<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="1" <?php if($ios == \'1\') echo \'checked="checked"\'; ?> />上架
            <input type="radio" name="ios" value="0"<?php if($ios == \'0\') echo \'checked="checked"\'; ?> />下架
        </p>
        <p>
            添加时间:
            从<input type="text" name="fa" value="<?php echo I(\'get.fa\');?>" size="15"/><input type="text" name="ta" value="<?php echo I(\'get.ta\');?>" size="15"/>
        </p>
        <p>
            <input type="submit" value="搜索" />
        </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="id_desc" <?php if($odby == \'id_desc\') echo \'checked="checked"\';?> />以添加时间降序
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="id_asc" <?php if($odby == \'id_asc\') echo \'checked="checked"\';?> />以添加时间升序
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="price_desc" <?php if($odby == \'price_desc\') echo \'checked="checked"\';?> />以价格降序
            <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="price_asc" <?php if($odby == \'price_asc\') echo \'checked="checked"\';?> />以价格升序
        </p>
排序html

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

 

 

以上是关于PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索翻页排序的主要内容,如果未能解决你的问题,请参考以下文章

PHP.36-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除修改

PHP.30-TP框架商城应用实例-后台6-商品会员-价格级别

PHP.27-TP框架商城应用实例-后台3-商品修改删除

PHP.32-TP框架商城应用实例-后台10-商品分类-需求分析创建无限级商品分类,递归

PHP.40-TP框架商城应用实例-后台17-商品属性3-商品分类的修改与删除

PHP.30-TP框架商城应用实例-后台8-商品相册-添加