商品列表页

1、翻页

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

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

  1. /**
  2. *实现翻页、搜索、排序
  3. *
  4. */
  5. public function search($perPage = 5) //$perPage控制显示条数
  6. {
  7. /***********翻页***********/
  8. //取出总的记录数
  9. $count = $this->count();
  10. //生成翻页类的对象
  11. $pageObj = new \Think\Page($count, $perPage);
  12. //设置样式
  13. $pageObj->setConfig('next', '下一页');
  14. $pageObj->setConfig('prev', '上一页');
  15. //生成页面下面显示的上一页、下一页的字符串
  16. $pageString = $pageObj->show();
  17.  
  18. /**********取某一页的数据**********/
  19. $data = $this->limit($pageObj->firstRow.','.$pageObj->listRows)->select();
  20.  
  21. /************返回数据*************/
  22. return array(
  23. 'data' => $data, //数据
  24. 'page' => $pageString, //翻页字符串
  25. );
  26. }

function search()

创建lst静态页

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>ECSHOP 管理中心 - 商品列表 </title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <link href="__PUB__/Admin/Styles/general.css" rel="stylesheet" type="text/css" />
  7. <link href="__PUB__/Admin/Styles/main.css" rel="stylesheet" type="text/css" />
  8. </head>
  9. <body>
  10. <h1>
  11. <span class="action-span"><a href="__GROUP__/Goods/goodsAdd">添加新商品</a></span>
  12. <span class="action-span1"><a href="__GROUP__">ECSHOP 管理中心</a></span>
  13. <span id="search_id" class="action-span1"> - 商品列表 </span>
  14. <div style="clear:both"></div>
  15. </h1>
  16. <!--搜索表单【基本都是get】-->
  17. <!--name的名称自取,get提交时会把name值提交到对应的模型类处理-->
  18. <!--为了在搜索后的表单中显示搜索内容,通过<I(get.))>从get传参中获取响应的值到value-->
  19. <div class="form-div">
  20. <form action="__SELF__" name="searchForm" method="GET">
  21. <p>
  22. 商品名称:
  23. <input value="<?php echo I('get.gn');?>" type="text" name="gn" size="40" />
  24. </p>
  25. <p>
  26. 价&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格:
  27. 从<input value="<?php echo I('get.fp');?>" type="text" name="fp" size="8" />
  28. 到<input value="<?php echo I('get.tp');?>" type="text" name="tp" size="8" />
  29. </p>
  30. <p>
  31. 是否上架:
  32. <?php $ios = I('get.ios');?>
  33. <input type="radio" name="ios" value="" <?php if($ios == '') echo 'checked="checked"'; ?> />全部
  34. <input type="radio" name="ios" value="1" <?php if($ios == '1') echo 'checked="checked"'; ?> />上架
  35. <input type="radio" name="ios" value="0"<?php if($ios == '0') echo 'checked="checked"'; ?> />下架
  36. </p>
  37. <p>
  38. 添加时间:
  39. 从<input type="text" name="fa" value="<?php echo I('get.fa');?>" size="15"/>
  40. 到<input type="text" name="ta" value="<?php echo I('get.ta');?>" size="15"/>
  41. </p>
  42. <p>
  43. <input type="submit" value="搜索" />
  44. </p>
  45. </form>
  46. </div>
  47.  
  48. <!-- 商品列表 -->
  49. <form method="post" action="" name="listForm" onsubmit="">
  50. <div class="list-div" id="listDiv">
  51. <table cellpadding="3" cellspacing="1">
  52. <tr>
  53. <th>编号</th>
  54. <th>商品名称</th>
  55. <th>logo</th>
  56. <th>市场价格</th>
  57. <th>本店价格</th>
  58. <th>上架</th>
  59. <th>添加时间</th>
  60. <th>操作</th>
  61. </tr>
  62. <?php foreach ($data as $k => $v): ?>
  63. <tr>
  64. <td align="center"><?php echo $v['id']; ?></td>
  65. <td align="center" class="first-cell"><span><?php echo $v['name']; ?></span></td>
  66. <td align="center"><img src="/Public/Uploads/<?php echo $v['sm_logo']; ?>" /></td>
  67. <td align="center"><?php echo $v['market_price']; ?></td>
  68. <td align="center"><?php echo $v['shop_price']; ?></td>
  69. <td align="center"><?php if($v['is_on_sale']==1){echo '是';}else{echo '否';} ?></td>
  70. <td align="center"><?php echo $v['addtime']; ?></td>
  71. <td align="center">
  72. <a href="">修改</a>
  73. <a href="">删除</a>
  74. </td>
  75. </tr>
  76. <?php endforeach;?>
  77. </table>
  78.  
  79. <!-- 分页开始 -->
  80. <table id="page-table" cellspacing="0">
  81. <tr>
  82. <td width="80%">&nbsp;</td>
  83. <td align="center" nowrap="true">
  84. <?php echo $page;?>
  85. </td>
  86. </tr>
  87. </table>
  88. <!-- 分页结束 -->
  89. </div>
  90. </form>
  91.  
  92. <div id="footer">
  93. 共执行 7 个查询,用时 0.028849 秒,Gzip 已禁用,内存占用 3.219 MB<br />
  94. 版权所有 &copy; 2005-2012 上海商派网络科技有限公司,并保留所有权利。</div>
  95. </body>
  96. </html>

lst.html

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

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

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

在lst.html中添加搜索表单

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

  1. <!--搜索表单【基本都是get】-->
  2. <!--name的名称自取,get提交时会把name值提交到对应的模型类处理-->
  3. <!--为了在搜索后的表单中显示搜索内容,通过<I(get.))>从get传参中获取响应的值到value-->
  4. <div class="form-div">
  5. <form action="__SELF__" name="searchForm" method="GET">
  6. <p>
  7. 商品名称:
  8. <input value="<?php echo I('get.gn');?>" type="text" name="gn" size="40" />
  9. </p>
  10. <p>
  11. 价&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格:
  12. 从<input value="<?php echo I('get.fp');?>" type="text" name="fp" size="8" />
  13. 到<input value="<?php echo I('get.tp');?>" type="text" name="tp" size="8" />
  14. </p>
  15. <p>
  16. 是否上架:
  17. <?php $ios = I('get.ios');?>
  18. <input type="radio" name="ios" value="" <?php if($ios == '') echo 'checked="checked"'; ?> />全部
  19. <input type="radio" name="ios" value="1" <?php if($ios == '1') echo 'checked="checked"'; ?> />上架
  20. <input type="radio" name="ios" value="0"<?php if($ios == '0') echo 'checked="checked"'; ?> />下架
  21. </p>
  22. <p>
  23. 添加时间:
  24. 从<input type="text" name="fa" value="<?php echo I('get.fa');?>" size="15"/>
  25. 到<input type="text" name="ta" value="<?php echo I('get.ta');?>" size="15"/>
  26. </p>
  27. <p>
  28. <input type="submit" value="搜索" />
  29. </p>
  30. </form>
  31. </div>

搜索表单 

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

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

  1. public function search($perPage = 5) //$perPage控制显示条数
  2. {
  3. /***********搜索(获取get提交的数据)************/
  4. $where =array(); //空的where条件
  5. //商品名称
  6. $gn = I('get.gn');
  7. if($gn)
  8. $where['goods_name'] = array('like', "%$gn%"); //WHERE goods_name LIKE '%$gn%'
  9. //市场价格
  10. $fp = I('get.fp');
  11. $tp = I('get.tp');
  12. if($fp && $tp)
  13. $where['shop_price'] = array('between', array($fp, $tp)); //WHERE shop_price BETWEEN $fp AND $tp
  14. elseif($fp)
  15. $where['shop_price'] = array('egt', $fp); //WHERE shop_price >= $fp
  16. elseif($tp)
  17. $where['shop_price'] = array('elt', $tp); //WHERE shop_price <= $tp
  18. //是否上架
  19. $ios = I('get.ios');
  20. if($ios)
  21. $where['is_on_sale'] = array('eq', $ios); //WHERE is_on_sale = $ios
  22. //添加时间
  23. $fa = I('get.fa');
  24. $ta = I('get.ta');
  25. if($fa && $ta)
  26. $where['addtime'] = array('between', array($fa, $ta)); //WHERE addtime BETWEEN $fa ADD $ta
  27. elseif($fa)
  28. $where['addtime'] = array('egt', $fa); //WHERE addtime >= $fa
  29. elseif($ta)
  30. $where['addtime'] = array('elt', $ta); //WHERE addtime <= $ta
  31.  
  32. /***********翻页***********/
  33. //取出总的记录数
  34. $count = $this->where($where)->count();
  35. //生成翻页类的对象
  36. $pageObj = new \Think\Page($count, $perPage);
  37. //设置样式
  38. $pageObj->setConfig('next', '下一页');
  39. $pageObj->setConfig('prev', '上一页');
  40. //生成页面下面显示的上一页、下一页的字符串
  41. $pageString = $pageObj->show();
  42.  
  43. /**********取某一页的数据**********/
  44. $data = $this->where($where)->limit($pageObj->firstRow.','.$pageObj->listRows)->select();
  45.  
  46. /************返回数据*************/
  47. return array(
  48. 'data' => $data, //数据
  49. 'page' => $pageString, //翻页字符串
  50. );
  51. }

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();}

  1. <p>
  2. 排序方式:
  3. <?php $odby = I('get.odby', 'id_desc'); //如果odby为空,那么默认是'id_desc'?>
  4. <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="id_desc" <?php if($odby == 'id_desc') echo 'checked="checked"';?> />以添加时间降序
  5. <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="id_asc" <?php if($odby == 'id_asc') echo 'checked="checked"';?> />以添加时间升序
  6. <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="price_desc" <?php if($odby == 'price_desc') echo 'checked="checked"';?> />以价格降序
  7. <input onclick="this.parentNode.parentNode.submit();" type="radio" name="odby" value="price_asc" <?php if($odby == 'price_asc') echo 'checked="checked"';?> />以价格升序
  8. </p>

排序html

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

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

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

    添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...

  2. PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表

    表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...

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

    商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...

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

    商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...

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

    商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Mod ...

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

    权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...

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

    Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...

  8. PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析

    RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...

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

    库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...

随机推荐

  1. python的元组

    Python的元组和列表很相似,只是元组一旦定义就无法修改,比如定义一个学生的元组: names = ('alex','jack') print(names)#('alex', 'jack') pri ...

  2. 我的Java修养

    无论如何我都会以这种方式严于律己,如有错误接受修正. 1.戒掉对友情和爱情的幻想 2.针对人的行为进行分析,而不是其语言 3.解决一个问题,这个问题会成为解决后续问题的基础和前提 4.不要炫耀,自负, ...

  3. MYSQL的基本语法

    .默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 复制代码 代码如下: --sqlserver CREATE TABLE emp ( id INT DEFAULT() ) --m ...

  4. framework7 v2.x轮播图写法:

    <div class="swiper-container swiper-init travel-index-swiper"> <div class="s ...

  5. 字符串处理(POJ1782)

    题目链接:http://poj.org/problem?id=1782 解题报告: #include <iostream> #include <cstdio> #include ...

  6. 利用API设置桌面背景

    实现效果: 知识运用: API函数SystemParametersInfo 实现代码: [DllImport("user32.dll", EntryPoint = "Sy ...

  7. 阿里数据库连接池druid

    官方wiki: https://github.com/alibaba/druid/wiki 实用方法介绍的想当详细,包含监控.扩展.大力推荐!

  8. C#接口定义

    C#接口定义 C#不支持多重继承,但是客观世界出现多重继承的情况又比较多.为了避免传统的多重继承给程序带来的复杂性等问题,C# 提出了接口的概念.通过接口可以实现多重继承的功能.  继承该接口的类或结 ...

  9. python main

    python中的main函数,总体来说就是,main比较适合写test测试,有点类似于java中的testcase,就是程序单独运行时是运行main的,但是当被调用时就不会运行main了.具体可以参考 ...

  10. 前端jQuery之事件流

    1.事件流概念 描述的是从页面中接收事件的顺序 包含事件捕获阶段,处于目标阶段,事件冒泡阶段 2.绑定事件 语法 bind(type,data,fn) 示例:每个标签被点击的时候,弹出其文本 $(&q ...