PHP.25-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>
价 格:
从<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%"> </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 />
版权所有 © 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>
价 格:
从<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.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序的更多相关文章
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
- PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...
- PHP.26-TP框架商城应用实例-后台3-商品修改、删除
商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Mod ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
- PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析
RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...
- PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...
随机推荐
- 新建一个controller并指定为默认的方法
在之前的项目中升级了MVC的DLL导致一开始程序运行时走的controller的有参构造方法变为走无参构造方法,但是该controller没有无参的构造方法,为了强制让程序走有参的构造方法,就在glo ...
- 1006: Hero In Maze
1006: Hero In Maze 时间限制: 1000 Sec 内存限制: 64 MB提交: 417 解决: 80[提交][状态][讨论版][命题人:外部导入] 题目描述 500年前,Jess ...
- P1903 数颜色
题目 带修莫队题. 在询问上多加一个变量,记录是在那次修改之后的. 然后暴力修改. 就没了. 不过有一些修改的小技巧 #include<cstdio> #include<algori ...
- HttpWebRequest类之基本定义
HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...
- Python——并发编程
开始说并发编程之前,最好有一定的底层知识积累,这里我把需要的知识总结了一下,如果看下面的有不理解的可以看一下:https://www.cnblogs.com/kuxingseng95/p/941820 ...
- Android Studio项目中三种依赖的添加方式
通常一个AS项目中的依赖关系有三种,一是本地依赖(主要是对本地的jar包),二是模块依赖,三是远程依赖:添加这些依赖的目的在于上我们想要在项目的某一个模块中使用其中的功能,比如okttp这个网络框架库 ...
- Eclipse Git 插件 基本操作一【learn】
安装GIT插件: 我的Eclipse版本为: Oxygen.2 Release (4.7.2),所以自带GIT插件,跳过安装. GIT插件配置: ①.添加好用户名和邮箱 注意下输入格式:user.na ...
- Webpack4 学习笔记二 CSS模块转换
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack 打包css模块 webpack是js模块打包器, 如果在入口文件引入css文件或其它的less.sass等文件,需要 ...
- 写一个addEventListener以及removeEventListener
第一步:对象属性赋值为函数,对象内部函数控制年龄这一参数变化,同时成长事件也执行. class Person{ constructor(){ this.name = ''; this.age = 0; ...
- react中内联样式的z-index不起作用.
<div style={{z-index: -100}} > hello,money. </div> 以上z-index样式如上写法是不起作用,原因是在react中内联样式的写 ...