此为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 里的值,没有就为“”  )

  1. $dataProvider = $model->search(array(
  2. 'pageNum'=>intval($this->tryGetRequest('pageNum'))-1,
  3. 'numPerPage'=>$this->tryGetRequest('numPerPage'),
  4.  
  5. ));
  6.  
  7. $this->renderPartial('index', array(
  8. 'list' => $dataProvider->data,
  9. 'pagination'=>$dataProvider->getPagination(),
  10. 'keyword'=>$model->probe_chinese_name,
  11. 'probe_area'=>$model->probe_area,
  12.  
  13. ));

之后search 是我稍微改了下的,加了个对页数的控制,需要注意的是,Yii的Page 是从0开始的 dwz 是从1 开始的,所以需要判断下

  1. public function search($pagination){
  2. if(!isset($pagination)){
  3. return parent::search();
  4. }
  5.  
  6. $criteria = new CDbCriteria;
  7.  
  8. // 常规处理的代码之后加点判断。。。
  9.  
  10. $pageInfo = array();
  11. if(!empty($pagination['numPerPage'])){
  12. $pageInfo['pageSize']=$pagination['numPerPage'];
  13. }
  14. if(!empty($pagination['pageNum'])){
  15. $pageInfo['currentPage']=$pagination['pageNum'];
  16. }
  17.  
  18. return new CActiveDataProvider($this, array(
  19. 'criteria' => $criteria,
  20. 'pagination'=> $pageInfo,
  21. ));
  22. }

之后在页面里   加入dwz的分页控件,具体数据就从这个pagination 来

  1. <div class="pagination" targetType="navTab"
  2. totalCount="<?php echo $pagination->itemCount ?>" numPerPage="10"
  3. currentPage="<?php echo ($pagination->currentPage!=0)?intval($pagination->currentPage)+1:1; ?>"></div>

之后做一个form   专门来提交分页信息

  1. <form id="pagerForm" onsubmit="return navTabSearch(this)" action="<?php echo Yii::app()->request->getUrl();?>" method="post">
  2. <input type="hidden" name="pageNum" value="1" />
  3. <input type="hidden" name="numPerPage" value="10" />
  4. </form>

至此,分页就能实现了     那么筛选条件呢?

可以把筛选条件加入到这个pagerForm 里面    但是  搜索完毕之后,分页了,搜索条件就丢失了   这里就要注意   每次搜索完毕后一定要将POST 的信息绑定回来

附上完整的源代码

view 的

  1. <div class="pageHeader">
  2. <form id="pagerForm" onsubmit="return navTabSearch(this)" action="<?php echo Yii::app()->request->getUrl();?>" method="post">
  3. <input type="hidden" name="pageNum" value="1" />
  4. <input type="hidden" name="numPerPage" value="10" />
  5. <div class="searchBar">
  6. <table class="searchContent">
  7. <tr>
  8. <td>
  9. 探针名称:<input type="text" name="keyword" value= "<?php echo isset($keyword)?$keyword:''; ?>" />
  10. </td>
  11.  
  12. <td>
  13. 归属地:
  14. <?php echo CHtml::dropDownList('probe_area', $probe_area,
  15. GxHtml::listDataEx(ProbeArea::model()->findAllAttributes(null, true)),array("empty"=>"请选择")
  16. ); ?>
  17. </td>
  18.  
  19. <td>
  20. 建档日期:<input type="text" class="date" readonly="true" />
  21. </td>
  22. </tr>
  23. </table>
  24. <div class="subBar">
  25. <ul>
  26. <li><div class="buttonActive"><div class="buttonContent"><button type="submit">检索</button></div></div></li>
  27. </ul>
  28. </div>
  29. </div>
  30. </form>
  31. </div>
  32. <div class="pageContent">
  33. <div class="panelBar">
  34. <ul class="toolBar">
  35. <li><a class="add" href="<?php echo $this->createUrl("Create"); ?>" target="dialog"><span>添加所属规划</span></a></li>
  36. <li><a class="edit" href="<?php echo $this->createUrl("ProbeArea/index") ?>" target="dialog" rel="areaList" ><span>管理所属规划</span></a></li>
  37. <li><a class="edit" href="<?php echo $this->createUrl("Update") ?>?id={template_id}" target="dialog"><span>修改</span></a></li>
  38. <li class="line">line</li>
  39. <li><a class="icon" href="demo/common/dwz-team.xls" target="dwzExport" targetType="navTab" title="实要导出这些记录吗?"><span>导出EXCEL</span></a></li>
  40. </ul>
  41. </div>
  42. <table class="table" width="100%" layoutH="138">
  43. <thead>
  44. <tr>
  45. <th><?php echo Yii::t("app","ID");?></th>
  46. <th><?php echo Yii::t("app","Probe Chinese Name");?></th>
  47. <th><?php echo Yii::t("app","Hostname");?></th>
  48. <th><?php echo Yii::t("app","ProbeType|ProbeTypes");?></th>
  49. <th><?php echo Yii::t("app","Lng");?></th>
  50. <th><?php echo Yii::t("app","Lat");?></th>
  51. <th><?php echo Yii::t("app","ProbeArea");?></th>
  52. <th><?php echo Yii::t("app","User|Users");?></th>
  53. <th><?php echo Yii::t("app","Add Time");?></th>
  54. <th><?php echo Yii::t("app","TestTemplate|TestTemplates");?></th>
  55. </tr>
  56. </thead>
  57. <tbody>
  58. <?php foreach ($list as $model): ?>
  59. <tr target="template_id" rel="<?php echo $model->id ?>">
  60. <td><?php echo $model->id; ?></td>
  61. <td><?php echo $model->probe_chinese_name; ?></td>
  62. <td><?php echo $model->hostname; ?></td>
  63. <td><?php echo $model->probeType; ?></td>
  64. <td><?php echo $model->lng; ?></td>
  65. <td><?php echo $model->lat; ?></td>
  66. <td><?php echo $model->probeArea; ?></td>
  67. <td><?php echo $model->user; ?></td>
  68. <td><?php echo $model->add_time; ?></td>
  69. <td><?php echo CHtml::link("查看探针部署地图", $this->createUrl("details", array("id" => $model->id)), array("target" => "navTab")); ?></td>
  70.  
  71. </tr>
  72. <?php endforeach; ?>
  73.  
  74. </tbody>
  75. </table>
  76. <div class="panelBar">
  77. <div class="pages">
  78. <span>每页有10条,共<?php echo $pagination->itemCount ?></span>
  79. </div>
  80.  
  81. <div class="pagination" targetType="navTab"
  82. totalCount="<?php echo $pagination->itemCount ?>" numPerPage="10"
  83. currentPage="<?php echo ($pagination->currentPage!=0)?intval($pagination->currentPage)+1:1; ?>"></div>
  84.  
  85. </div>
  86. </div>

Controller的

  1. public function actionIndex() {
  2.  
  3. $model= ProbeInfo::model();
  4. if(isset($_POST["keyword"])){
  5. $model->probe_chinese_name = $_POST["keyword"];
  6. }
  7. if (isset($_POST["probe_area"])) {
  8. # code...
  9. $model->probe_area = $_POST["probe_area"];
  10. }
  11.  
  12. $dataProvider = $model->search(array(
  13. 'pageNum'=>intval($this->tryGetRequest('pageNum'))-1,
  14. 'numPerPage'=>$this->tryGetRequest('numPerPage'),
  15.  
  16. ));
  17.  
  18. $this->renderPartial('index', array(
  19. 'list' => $dataProvider->data,
  20. 'pagination'=>$dataProvider->getPagination(),
  21. 'keyword'=>$model->probe_chinese_name,
  22. 'probe_area'=>$model->probe_area,
  23.  
  24. ));
  25. }

model 的

  1. public function search($pagination){
  2. if(!isset($pagination)){
  3. return parent::search();
  4. }
  5.  
  6. $criteria = new CDbCriteria;
  7.  
  8. $criteria->compare('id', $this->id);
  9. $criteria->compare('probe_chinese_name', $this->probe_chinese_name, true);
  10. $criteria->compare('hostname', $this->hostname, true);
  11. $criteria->compare('probe_type', $this->probe_type);
  12. $criteria->compare('lng', $this->lng);
  13. $criteria->compare('lat', $this->lat);
  14. $criteria->compare('probe_area', $this->probe_area);
  15. $criteria->compare('user_id', $this->user_id);
  16. $criteria->compare('add_time', $this->add_time, true);
  17. $criteria->compare('test_template_id', $this->test_template_id);
  18.  
  19. $pageInfo = array();
  20. if(!empty($pagination['numPerPage'])){
  21. $pageInfo['pageSize']=$pagination['numPerPage'];
  22. }
  23. if(!empty($pagination['pageNum'])){
  24. $pageInfo['currentPage']=$pagination['pageNum'];
  25. }
  26.  
  27. return new CActiveDataProvider($this, array(
  28. 'criteria' => $criteria,
  29. 'pagination'=> $pageInfo,
  30. ));
  31. }
  32.  

关于js框架 dwz 与 yii的的分页 以及筛选的结合的更多相关文章

  1. 微信js框架第二篇(创建完整界面布局)

    接着昨天的继续谈关于微信新出的这个js框架,今天主要谈一个页面的创建到布局的详细步骤. 一.创建一个完整页面       页面你可以创建在项目的任何节点,只要你在入口文件正确引入创建该页面的路径就可使 ...

  2. JS框架

    s框架就是将常用的方法进行封装,方便调取使用.一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计.协作构件之间的依赖关系.责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方 ...

  3. 前端Js框架汇总

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

  4. Node.js 框架

    Node.js的是一个JavaScript平台,它允许你建立大型的Web应用程序.  Node.js的框架平台使用JavaScript作为它的脚本语言来构建可伸缩的应用. 当涉及到Web应用程序的开发 ...

  5. js框架设计1.1命名空间笔记

    借到了司徒正美的写的js框架设计一书,司徒大神所著有些看不太懂,果然尚需循序渐进,稳扎js基础之中. 第一张开篇司徒阐述了种子模块的概念 种子模块亦为核心模块,框架最先执行模块,司徒见解应包含:对象扩 ...

  6. 自己的JS框架--Amy框架。

    这是我根据司徒正美<JavaScript框架设计>一书然后百度了很多东西之后自己写的一个JS框架,满足了司徒正美文中的种子模块部分,包含了命名空间.对象扩展.数组化.类型判断.选择器.多库 ...

  7. Aurelia – 模块化,简单,可测试的 JS 框架

    Aurelia 是下一代 JavaScript 客户端框架,利用简单的约定来激发你的创造力.凭借其强大的专注于开发经验, Aurelia 可以使您不仅创造惊人的应用程序,同时也享受这个过程.它经过精心 ...

  8. JavaScriptOO.com – 快速找到你需要的 JS 框架

    JavaScriptOO.com 集合了目前 Web 开发中最常用的422(截至目前)款 JavaScript 框架,你可以根据功能类别(Ajax,动画,图表,游戏等)进行过滤和排序,快速找到你需要的 ...

  9. KnockoutJS---一个极其优秀的MVVM模型的js框架

    相信对于DotNet平台的开发人员来讲,MVVM模式已经不再是个陌生的词汇了吧.而我们今天介绍的Knockout JS, 则是一个MVVM模式的JS框架,官方网址:http://knockoutjs. ...

随机推荐

  1. Boost库之asio io_service以及run、run_one、poll、poll_one区别

    一.io_service的作用 io_servie 实现了一个任务队列,这里的任务就是void(void)的函数.Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,r ...

  2. JS 获取json长度

    var keleyijson={"plug1":"myslider","plug2":"zonemenu"," ...

  3. Python:.join()函数

    转于:https://blog.csdn.net/chixujohnny/article/details/53301995 博主:chixujohnny 介绍:.join是一个字符串操作函数,将元素相 ...

  4. 【转】Jquery折叠效果

    转自:http://www.cnblogs.com/clc2008/archive/2011/10/25/2223254.html <!DOCTYPE html PUBLIC "-// ...

  5. C#事件触发机制

    C#的事件触发机制,类似于c++的回调函数机制 我先简单说一下,委托和事件的实质,后期再重开一篇博文来详细说 委托:指向方法的指针,类似于C的函数指针 事件:是一个可以存放0个或多个方法指针的数据结构 ...

  6. javaScript之跨浏览器的事件对象

    跨浏览器的兼容代码 var eventHandler = { addHandler: function(element, type, handler){}, removeHandler: functi ...

  7. MyBatis构建sql时动态传入表名以及字段名

    今天项目需要用到动态表名,找到这一篇文章,亲测可用 用了mybatis很长一段时间了,但是感觉用的都是比较基本的功能,很多mybatis相对ibatis的新功能都没怎么用过.比如其内置的注解功能之类的 ...

  8. 基于MapReduce的矩阵乘法

    参考:http://blog.csdn.net/xyilu/article/details/9066973文章 文字未得及得总结,明天再写文字,先贴代码 package matrix; import ...

  9. CSS, Sass, SCSS 关系

    Sass(Syntactically Awesome Style Sheets) ,是一种css预处理器和一种语言, 它可以用来定义一套新的语法规则和函数,以加强和提升CSS. 它有很多很好的特性,但 ...

  10. 1. sqlmap超详细笔记+思维导图

    sqlmap思维导图: 基本操作笔记: -u #注入点 -f #指纹判别数据库类型 -b #获取数据库版本信息 -p #指定可测试的参数(?page=1&id=2 -p "page, ...