关于js框架 dwz 与 yii的的分页 以及筛选的结合
此为jicheng1014 原创。。。。地址为http://jicheng1014.cnblogs.com
dwz是一个不错的前端框架 但是 注意 所有的后端 都是要自己写的
常见的应用是 有一堆条件作为筛选,之后下面是一个表,如果数据量大的话 就涉及到了分页
由于dwz是前端框架 所以获取数据什么的 就需要自己写了
分页前端其实只需要知道4个东西
1、当前页面
2、当前数据
3、每页的大小
4、数据的行数
但是其实Yii 里本身就有自己的数据显示控件CGridview,理论上应该是封装了分页需要的所有动作,那么怎样把Yii和Dwz的数据结合起来?、
答案是 CActiveDataProvider 这个对象 即model 里search 的返回 因为这个Provider 里面有个属性,Pagination,很明显,那存放的是关于分页的信息。
为了方便,我直接默认设置每页大小为10(Yii默认)
于是我将我的Action改变为 (ps tryGetRequest 为试着获取$_POST 里的值,没有就为“” )
$dataProvider = $model->search(array(
'pageNum'=>intval($this->tryGetRequest('pageNum'))-1,
'numPerPage'=>$this->tryGetRequest('numPerPage'), )); $this->renderPartial('index', array(
'list' => $dataProvider->data,
'pagination'=>$dataProvider->getPagination(),
'keyword'=>$model->probe_chinese_name,
'probe_area'=>$model->probe_area, ));
之后search 是我稍微改了下的,加了个对页数的控制,需要注意的是,Yii的Page 是从0开始的 dwz 是从1 开始的,所以需要判断下
public function search($pagination){
if(!isset($pagination)){
return parent::search();
}
$criteria = new CDbCriteria;
// 常规处理的代码之后加点判断。。。
$pageInfo = array();
if(!empty($pagination['numPerPage'])){
$pageInfo['pageSize']=$pagination['numPerPage'];
}
if(!empty($pagination['pageNum'])){
$pageInfo['currentPage']=$pagination['pageNum'];
}
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination'=> $pageInfo,
));
}
之后在页面里 加入dwz的分页控件,具体数据就从这个pagination 来
<div class="pagination" targetType="navTab"
totalCount="<?php echo $pagination->itemCount ?>" numPerPage="10"
currentPage="<?php echo ($pagination->currentPage!=0)?intval($pagination->currentPage)+1:1; ?>"></div>
之后做一个form 专门来提交分页信息
<form id="pagerForm" onsubmit="return navTabSearch(this)" action="<?php echo Yii::app()->request->getUrl();?>" method="post">
<input type="hidden" name="pageNum" value="1" />
<input type="hidden" name="numPerPage" value="10" />
</form>
至此,分页就能实现了 那么筛选条件呢?
可以把筛选条件加入到这个pagerForm 里面 但是 搜索完毕之后,分页了,搜索条件就丢失了 这里就要注意 每次搜索完毕后一定要将POST 的信息绑定回来
附上完整的源代码
view 的
<div class="pageHeader">
<form id="pagerForm" onsubmit="return navTabSearch(this)" action="<?php echo Yii::app()->request->getUrl();?>" method="post">
<input type="hidden" name="pageNum" value="1" />
<input type="hidden" name="numPerPage" value="10" />
<div class="searchBar">
<table class="searchContent">
<tr>
<td>
探针名称:<input type="text" name="keyword" value= "<?php echo isset($keyword)?$keyword:''; ?>" />
</td> <td>
归属地:
<?php echo CHtml::dropDownList('probe_area', $probe_area,
GxHtml::listDataEx(ProbeArea::model()->findAllAttributes(null, true)),array("empty"=>"请选择")
); ?>
</td> <td>
建档日期:<input type="text" class="date" readonly="true" />
</td>
</tr>
</table>
<div class="subBar">
<ul>
<li><div class="buttonActive"><div class="buttonContent"><button type="submit">检索</button></div></div></li>
</ul>
</div>
</div>
</form>
</div>
<div class="pageContent">
<div class="panelBar">
<ul class="toolBar">
<li><a class="add" href="<?php echo $this->createUrl("Create"); ?>" target="dialog"><span>添加所属规划</span></a></li>
<li><a class="edit" href="<?php echo $this->createUrl("ProbeArea/index") ?>" target="dialog" rel="areaList" ><span>管理所属规划</span></a></li>
<li><a class="edit" href="<?php echo $this->createUrl("Update") ?>?id={template_id}" target="dialog"><span>修改</span></a></li>
<li class="line">line</li>
<li><a class="icon" href="demo/common/dwz-team.xls" target="dwzExport" targetType="navTab" title="实要导出这些记录吗?"><span>导出EXCEL</span></a></li>
</ul>
</div>
<table class="table" width="100%" layoutH="138">
<thead>
<tr>
<th><?php echo Yii::t("app","ID");?></th>
<th><?php echo Yii::t("app","Probe Chinese Name");?></th>
<th><?php echo Yii::t("app","Hostname");?></th>
<th><?php echo Yii::t("app","ProbeType|ProbeTypes");?></th>
<th><?php echo Yii::t("app","Lng");?></th>
<th><?php echo Yii::t("app","Lat");?></th>
<th><?php echo Yii::t("app","ProbeArea");?></th>
<th><?php echo Yii::t("app","User|Users");?></th>
<th><?php echo Yii::t("app","Add Time");?></th>
<th><?php echo Yii::t("app","TestTemplate|TestTemplates");?></th>
</tr>
</thead>
<tbody>
<?php foreach ($list as $model): ?>
<tr target="template_id" rel="<?php echo $model->id ?>">
<td><?php echo $model->id; ?></td>
<td><?php echo $model->probe_chinese_name; ?></td>
<td><?php echo $model->hostname; ?></td>
<td><?php echo $model->probeType; ?></td>
<td><?php echo $model->lng; ?></td>
<td><?php echo $model->lat; ?></td>
<td><?php echo $model->probeArea; ?></td>
<td><?php echo $model->user; ?></td>
<td><?php echo $model->add_time; ?></td>
<td><?php echo CHtml::link("查看探针部署地图", $this->createUrl("details", array("id" => $model->id)), array("target" => "navTab")); ?></td> </tr>
<?php endforeach; ?> </tbody>
</table>
<div class="panelBar">
<div class="pages">
<span>每页有10条,共<?php echo $pagination->itemCount ?>条</span>
</div> <div class="pagination" targetType="navTab"
totalCount="<?php echo $pagination->itemCount ?>" numPerPage="10"
currentPage="<?php echo ($pagination->currentPage!=0)?intval($pagination->currentPage)+1:1; ?>"></div> </div>
</div>
Controller的
public function actionIndex() {
$model= ProbeInfo::model();
if(isset($_POST["keyword"])){
$model->probe_chinese_name = $_POST["keyword"];
}
if (isset($_POST["probe_area"])) {
# code...
$model->probe_area = $_POST["probe_area"];
}
$dataProvider = $model->search(array(
'pageNum'=>intval($this->tryGetRequest('pageNum'))-1,
'numPerPage'=>$this->tryGetRequest('numPerPage'),
));
$this->renderPartial('index', array(
'list' => $dataProvider->data,
'pagination'=>$dataProvider->getPagination(),
'keyword'=>$model->probe_chinese_name,
'probe_area'=>$model->probe_area,
));
}
model 的
public function search($pagination){
if(!isset($pagination)){
return parent::search();
}
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('probe_chinese_name', $this->probe_chinese_name, true);
$criteria->compare('hostname', $this->hostname, true);
$criteria->compare('probe_type', $this->probe_type);
$criteria->compare('lng', $this->lng);
$criteria->compare('lat', $this->lat);
$criteria->compare('probe_area', $this->probe_area);
$criteria->compare('user_id', $this->user_id);
$criteria->compare('add_time', $this->add_time, true);
$criteria->compare('test_template_id', $this->test_template_id);
$pageInfo = array();
if(!empty($pagination['numPerPage'])){
$pageInfo['pageSize']=$pagination['numPerPage'];
}
if(!empty($pagination['pageNum'])){
$pageInfo['currentPage']=$pagination['pageNum'];
}
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination'=> $pageInfo,
));
}
关于js框架 dwz 与 yii的的分页 以及筛选的结合的更多相关文章
- 微信js框架第二篇(创建完整界面布局)
接着昨天的继续谈关于微信新出的这个js框架,今天主要谈一个页面的创建到布局的详细步骤. 一.创建一个完整页面 页面你可以创建在项目的任何节点,只要你在入口文件正确引入创建该页面的路径就可使 ...
- JS框架
s框架就是将常用的方法进行封装,方便调取使用.一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计.协作构件之间的依赖关系.责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方 ...
- 前端Js框架汇总
概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...
- Node.js 框架
Node.js的是一个JavaScript平台,它允许你建立大型的Web应用程序. Node.js的框架平台使用JavaScript作为它的脚本语言来构建可伸缩的应用. 当涉及到Web应用程序的开发 ...
- js框架设计1.1命名空间笔记
借到了司徒正美的写的js框架设计一书,司徒大神所著有些看不太懂,果然尚需循序渐进,稳扎js基础之中. 第一张开篇司徒阐述了种子模块的概念 种子模块亦为核心模块,框架最先执行模块,司徒见解应包含:对象扩 ...
- 自己的JS框架--Amy框架。
这是我根据司徒正美<JavaScript框架设计>一书然后百度了很多东西之后自己写的一个JS框架,满足了司徒正美文中的种子模块部分,包含了命名空间.对象扩展.数组化.类型判断.选择器.多库 ...
- Aurelia – 模块化,简单,可测试的 JS 框架
Aurelia 是下一代 JavaScript 客户端框架,利用简单的约定来激发你的创造力.凭借其强大的专注于开发经验, Aurelia 可以使您不仅创造惊人的应用程序,同时也享受这个过程.它经过精心 ...
- JavaScriptOO.com – 快速找到你需要的 JS 框架
JavaScriptOO.com 集合了目前 Web 开发中最常用的422(截至目前)款 JavaScript 框架,你可以根据功能类别(Ajax,动画,图表,游戏等)进行过滤和排序,快速找到你需要的 ...
- KnockoutJS---一个极其优秀的MVVM模型的js框架
相信对于DotNet平台的开发人员来讲,MVVM模式已经不再是个陌生的词汇了吧.而我们今天介绍的Knockout JS, 则是一个MVVM模式的JS框架,官方网址:http://knockoutjs. ...
随机推荐
- 在Eclipse中用JDBC连接Mysql数据库
一.配置要求 JDK(下载http://www.oracle.com/technetwork/java/javase/downloads/index.html) Mysql(下载http://www. ...
- Golang Channel用法简编
转自:http://tonybai.com/2014/09/29/a-channel-compendium-for-golang/ 在进入正式内容前,我这里先顺便转发一则消息,那就是Golang 1. ...
- rails中一个窗体多个模型——fields_for
详细参考 http://railscasts.com/episodes/73-complex-forms-part-1中part-1.2.3部分 借助field_for可以生成表单来处理两个或更多模型 ...
- 10个C语言经典
1.计算Fibonacci数列Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.C语言实现的代码如下: /* t3ing Fibonac ...
- github 分支操作
1.查看分支 1.查看本地分支 使用git branch命令,如下: $ git branch * master *标识的是你当前所在的分支. 2.查看远程分支 命令如下: git branch -r ...
- datanode与namenode的通信原理
在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. **A. DataNode的主要工作流程:** 1. 客户端和DataNode的通信: ...
- 32、Differential Gene Expression using RNA-Seq (Workflow)
转载: https://github.com/twbattaglia/RNAseq-workflow Introduction RNAseq is becoming the one of the mo ...
- iOS开发,使用CocoaSSDP查找设备时按关键字过滤Device
关于CocoaSSDP的资料有很多,这里就不介绍了. 希望寻找的目标设备,在header中设置了自定义的keyword,虽然通过外围代码也能达到相同目的,但是直接修改CocoaSSDP源码更简便. 导 ...
- Linux 静态库(.a)转换为动态库(.so)
Linux 静态库转换为动态库 参考 http://blog.csdn.net/moxuansheng/article/details/5812410 首先将.a文件转为.so文件是可以实现的 原因是 ...
- 13. CTF综合靶机渗透(六)
靶机说明 Breach1.0是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.110.140),需要将虚拟机网卡设置为host-only方式组网,并 ...