1、10. /* 这部分是处理where子句的,和本文关系不大,略过 */11. $whereArray = array(12. article.article_category_id =$this-getParam(Project_Table:article_category_id),13. article.article_status_idarticle_status_id14. );15. $whereString = 16. foreach ($whereArray as $key = $value) 17. if (! empty($value) 18. if ($key = &$val
2、ue = -1) 19. $whereString .= AND $key IS NULL20. else 21. $whereString .= AND $key = $value22. 23. 24. 25. if (! empty($whereString) 26. $whereString= substr($whereString, strlen( AND );27. else 28. $whereString = null;29. 30. /* 以上是处理where子句的 */31. $maxGetRows= Project_Config:PAGINATOR_ITEM_COUNT_P
3、ER_PAGE;/设置每页显示的记录数量32. $articles = $mArticle-getArticles($whereString, $sortBy, $maxGetRows, ($pageNumber - 1) * $maxGetRows);/从数据库中读取数据33. $countArticles= Project_Table:getLastFoundRows();/获得符合条件的数据总数34. if (empty($articles) & ! empty($countArticles) 35. /如果没有取到任何记录,而且记录总数不为空,说明当前页码超出范围了,所以处理一下36.
4、 $articles = $mArticle-getArticles($whereString, $sortBy, $maxGetRows, null);37. $pageNumber = 1;38. 39. $pDate= Project_Datetime:getInstance();/时间处理工具,和本文无关40. foreach ($articles as $key = $article) 41. $articles$keyProject_Table:modified) = $pDate-getUserTimeFromTime($articleProject_Table:), true)
5、;/把时间戳转换为用户的当地时间,和本文无关42. 43. $paginator= Zend_Paginator:factory($countArticles, Null/调用Zend提供的分页适配器,参数1是总记录数,参数2是适配器的名字44. $paginator-setCurrentPageNumber($pageNumber);/告诉分页器当前页码45. $pages = $paginator-getPages();/得到了前面提到的所有参数,后面我会打印它,这样你会直观的看到其内容46. $this-view-articles = $articles;47. $this-pages
6、= $pages;48. /以下处理是为了页面中的下拉选单提供选项数据,和本文关系不大49. if(! $this-isPost() 50. $mpArticle= new Mapper_Article();51. $this-elementArticleStatusId = $mpArticle-getElement(, array(Project_Mapper:OPTIONS_NULLABLE =true, Project_Mapper:OPTIONS_DEFAULT =52. $_categories = $mArticle-getAllowAppendArticleArticleCat
7、egories(null, null, null, null, true);53. $categories = array(54. $this-translate(Model_Article:NO_CATEGORY) =,55. );56. foreach ($_categories as $key = $row) 57. $categories$rowProject_Table:article_categoryname) = $rowProject_Table:);58. 59. $mpArticle= new Mapper_Article();60. $this-elementArticl
8、eCategories = $mpArticle-OPTIONS_IN_ARRAY =$categories, Project_Mapper:true);61. 62. $pages中的内容我打印了一下,这样更直观。如下。63. stdClass Object64. (65. pageCount = 366. itemCountPerPage = 1067. first = 168. current = 269. last =70. previous =71. next =72. pagesInRange = Array73. (74. 1 =75. 2 =76. 3 =77. )78. 79
9、. firstPageInRange =80. lastPageInRange =81. currentItemCount =82. totalItemCount = 2183. firstItemNumber = 1184. lastItemNumber = 2085. )Zend Framework的开发人员确实很认真,返回的参数非常充分,不需要任何的补充。顺便提一下以上代码中未体现的细节,当使用post方式访问该页面时会得到json数据而不是html。这个细节写在init()方法中,代码如下:86. public function init() 87. if ($this-88. $th
10、is-_helper89. -contextSwitch()90. -addActionContext(articlesjson) /就是这里咯91. -trashcategory)92. -trasharticle93. -movecategory94. -initContext(95. 96. HTML示例代码详解这次只贴出关键的内容哦。97. form method=POST action=url()? onsubmit=98. try99. return pBase.submitForm(this, true, null, loadArticlesGrid);/使用ajax提交表单,回
11、调函数为loadArticlesGrid100. catch(e) 101. alert(e.message);102. return false;103. ;104. div class=beforeGridclearFloat105. floatLeft106. 107. pages-current, )?108. 109. 110. floatRight111. elementArticleStatusId, array(onchangepBase.paginator(div.paginationname=articlesgoto112. elementArticleCategories
12、, array(113. actionTitle(createarticle), window.open($this-url(array(actioneditarticle), ! Project_Session:getInstance()-isAllow()?114. 115. 116. 117. table id=articleGridTable class=gridTable118. 119. afterGridclearFloat120. 121. , false)?122. 123. 124. 125. script type=text/javascript126. $(docume
13、nt).ready(function()127. /这句话就是调用js绘制分页的,第一个参数是目标容器,第二个参数是相关参数组成的json对象(就是$pages)啦)128. pBase.paginator(, $jsonPages);129. );130. function loadArticlesGrid(response) 131. /ajax回调,此时重绘分页132. pBase.paginator(, response.pages);133. 134. 里面用到了一个helper,因为这样可以避免反复去写类似的html内容。带有两个参数,第一个是当前的页码,第二个用于控制是否输出表单
14、元素(默认为true,输出)。当第二个参数为默认值true时,其输出如下:135. sortbydivclass=pagination clearFloatarticles为false时其输出为:136. 对于参数为true的输出,您可能会问为什么sortby没有初始值?确实没想过,我也不希望用户在url中手动添加sortby参数。Javascript代码说明具体的代码很长,就不贴出来了,可以自行查看,仅列举配置信息和例子。137. var _configs = 138. boxClass: pagination,/分页的总体样式名称139. firstClass:first,/首页所使用的样
15、式名称140. firstText: false,/首页使用的文本,false表示使用数字141. lastClass:last,/尾页所使用的样式名称142. lastText: false,/尾页使用的文本,false表示使用数字143. previousClass:previous,/上一页使用的样式名称144. previousText:,/上一页所使用的文本145. nextClass:next,/下一页所使用的样式名称146. nextText:,/下一页所使用的文本147. pageClass:,/每个页面元素所使用的样式名称148. currentPageClass:curre
16、nt,/当前页所使用的样式名称149. pagesElementClass:pages,/所有页码的公共父节点使用的样式名称150. infoElementClass:info,/信息节点的公共父节点使用的样式名称151. infoElementCountPageClass:countPage,/总页数信息的样式名称152. infoElementCurrentPageClass:,/当前页信息的样式名称153. infoElementCountItemsClass:countItems,/总条目数量信息的样式名称154. infoElementPageItemsClass:pageItems
17、,/页内条目数量信息的样式名称155. infoElementFirstItemClass:,/本页内第一个条目的序号信息的样式名称156. infoElementLastItemClass:,/本页内最后一个条目的序号信息的样式名称157. ajaxBoxClass:ajaxBox,/ajax读取状态容器的样式名称158. ajaxLoader: function() 159. return $(ajaxLoader16160. ,/获取一个ajax读取中的html161. pageCount: 0,/总页数162. itemCountPerPage: 0,/页内最大条目数163. tota
18、lItemCount: 0,/总条目数164. pagesInRange: ,/页码列表165. firstPageInRange: false,/页码列表中的第一个页码166. lastPageInRange: false,/页码列表中的最后一个页码167. currentItemCount: 0,/本页条目数168. firstItemNumber: 1,/第一条的序号169. lastItemNumber: 1,/最后一条的序号170. previous: false,/上一页的页码171. first: false,/第一页的页码172. last: false,/最后一页的页码173
19、. current: 1,/当前页的页码174. next: false,/下一页的页码175. referenceForm:form:,/引用的表单176. referencePageItem:/表单中表示页码的表单元素名称177. ;功能原型:pBase.paginator(string|HtmlElement selector, jsonObject|stringconfigs, number)参数说明:selector: 选择器,分页的Html内容将注入到该选择器指定的元素。configs: 配置信息,如果是对象,那么利用该对象声明的参数重绘分页(此时忽略第三个参数number),如果
20、是字符串,字符串应为removeItem, addItem或者goto之一。number: 在configs为字符串时需要该参数。说明如下:configs为removeItem: number表示当前页内有多少行已经删除;configs为addItem: number表示当前页内新增了多少行;configs为goto: number表示目标页码;分别示例如下。178. pBase.paginator(#pager, ); /在$(#pager)内显示分页信息179. pBase.paginator(#pager, removeItem, 1); /页内条目数及总条目数-1180. pBase.paginator(#pager, addItem, 1); /页内条目数及总条目数+1181. pBase.paginator(#pager, goto, 5); /跳转到第5页表格功能详解其实就是Grid这个东西咯,设计目标是使用表格的方式展示数据,同时支持动态更新、插入和删除行。表格部分的完整功能截图如下,该截图来自baseProject项目后台的地理信息管理部分(文章管理部分的编辑功能没有使用表格自带的编辑逻辑)。表格实例截图(行内编辑窗口已弹出)设计思路数据源应该是json格式的二维数组。表格分为
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1