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变量排序,在取出数据前

时间: 2024-11-10 09:43:49

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

PHP.25-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace Admin\Controller; use Think\Controller; //后台添加商品功能控制器 class GoodsController extends Controller { //显示和处理表单 public function add() { //判断用户是否提交了表单(如果提交了,就

PHP.29-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新

商品表修改功能 1.页面优化,类似添加页面 1 <layout name="layout" /> 2 3 <div class="tab-div"> 4 <div id="tabbar-div"> 5 <p> 6 <span class="tab-front" >通用信息</span> 7 <span class="tab-back&quo

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

商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在修改页面edit.html中显示对应扩展分类foreach,类似添加页面 注:考虑当没有扩展分类时的显示,使用if($gcData) 3.在模型类GoodsModel.class.php/_before_update()中处理扩展分类,先删除原数据,再插入新数据[多对多时,通常的用法] <?php

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

商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Model::MODEL_UPDATE(或者2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成Model::MODEL_UPDATE操作. save():用于更新数据库信息:如果失败返回false,如果成功返回受影响条数 1.控制器GoodsController.c

PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,=>增加一个父控制器验证Session 让所有后台的控制器[除了Login控制器之外的]都继承自这个控制器 5.在管理员访问后台的任何一个页面之前先到数据库中查看当前管理员所在的角色是否有权限访问这个页面 在权限模型中增加此检查方法,在父类登录控制器中调用 6.后台左侧只显示当前管理员有权限访问的按钮

PHP.28-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码

Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字段必须有中文名,则Gii在生成代码时才能识别某字段的中文名是什么: 2.某字段验证规则不能为空:设置该建表字段为not null:一般所有字段都为not null,若不希望生成验证规则,则加上默认值default(默认值可为空): 3.生成上传图片代码:字段名中需包含logo|image|pic|f

PHP.39-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除

 添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性表p39_goods_attr{id,attr_value,attr_id,goods_id} /********商品属性表[多对多:一个属性可以有多个值,一个商品可以有多个属性,一个属性可以对应多个商品]*******/ drop if exists p39_goods_attr; create

PHP.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete:删除前的操作 protected function _before_delete($option) { $id = $option['where']['id']; //要删除的商品的ID /***********删除商品相片********/ //先查询出原商品相册的路径 $gpModel = M(

PHP.43-TP框架商城应用实例-后台16-商品属性3-库存量管理

库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_number,goods_str_id[商品属性id]} drop if exists p39_goods_number; create table p39_goods_number ( goods_id mediumint unsigned not null comment '商品Id', goods