- 浏览: 48605 次
- 性别:
- 来自: 深圳
文章分类
最新评论
通用的分页模板视图/view/application/page/control.phtml:
<!-- See http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination --> <?php $url = '/application/pagination-test/test-page?page='; ?> <?php if ($this->pageCount): ?> <div class="paginationControl"> <!-- Previous page link --> <?php if (isset($this->previous)): ?> <a href="<?php echo $url. $this->previous; ?>"> < Previous </a> | <?php else: ?> <span class="disabled">< Previous</span> | <?php endif; ?> <!-- Numbered page links --> <?php foreach ($this->pagesInRange as $page): ?> <?php if ($page != $this->current): ?> <a href="<?php echo $url. $page;?>"> <?php echo $page; ?> </a> | <?php else: ?> <?php echo $page; ?> | <?php endif; ?> <?php endforeach; ?> <!-- Next page link --> <?php if (isset($this->next)): ?> <a href="<?php echo $url. $this->next; ?>"> Next > </a> <?php else: ?> <span class="disabled">Next ></span> <?php endif; ?> </div> <?php endif; ?>
常规的ViewModel包含模板/view/application/pagination-test/test-page.phtml:
<html> <body> <h1>Example</h1> <div> <?php if (count($this->paginator)): ?> <ul> <?php foreach ($this->paginator as $item):?> <li><?php echo $item->value; ?></li> <?php endforeach; ?> </ul> <?php endif; ?> <?php echo $this->paginationControl($this->paginator,'Elastic','application/page/control.phtml', array('route' => 'application')); ?> </div> </body> </html>
Action方法:
public function testPageAction(){ $select = new \Zend\Db\Sql\Select(); $select->from('example'); $adapterOrSqlObject = $this->getServiceLocator()->get('dbAdapter'); $adapter = new \Zend\Paginator\Adapter\DbSelect($select, $adapterOrSqlObject); $paginator = new \Zend\Paginator\Paginator($adapter); $paginator->setCurrentPageNumber($this->params()->fromQuery('page')); $paginator->setDefaultItemCountPerPage(1); $vm = new ViewModel(); $vm->setVariable('paginator', $paginator); return $vm; }
以上代码分页没有任何问题。但如果我们需要让列表变成ajax加载,点击页数跳转页面无刷新效果,而不想在Js里重新很麻烦的将分页模板的逻辑及样式再写一遍, 那么我们需要共用之前的通用模板。
分页模板是通过这句代码传递参数的(如果我们AJAx方式时设置一个模板/ajax.phtml去包含这段代码将会有问题):
<?php echo $this->paginationControl($this->paginator,'Elastic','application/page/control.phtml', array('route' => 'application')); ?>
ZF2目前支持设置子模板, 但均是分开设置模板的参数的。如果Ajax方式加载时你想再通过这种方式去调用分页模板control.phtml, 那么会报找不到模板的错误, 因为这个地方分页的参数不能传递到control.phtml, 那么你可能要问为什么前面正常的情况下是能传递,并且没有问题的呢?这因为我们AJAx的action方法里需要解析模板直接返回数据给JS调用,那么加载的方式是不一样了。具体看下面的代码。
那么我们怎么解决呢?可以跳开这种思路, 有时在一个问题上纠结很久时,可以换种方法或许柳暗花明。
也许你想到了,对,我们直接调用分页模板control.phtml来进行参数赋值。
Ajax请求方法代码:
public function ajaxAction(){ $select = new \Zend\Db\Sql\Select(); $select->from('example'); $adapterOrSqlObject = $this->getServiceLocator()->get('dbAdapter'); $adapter = new \Zend\Paginator\Adapter\DbSelect($select, $adapterOrSqlObject); $paginator = new \Zend\Paginator\Paginator($adapter); $paginator->setCurrentPageNumber($this->params()->fromQuery('page')); $paginator->setDefaultItemCountPerPage(1); $renderer = new \Zend\View\Renderer\PhpRenderer(); $resolver = new \Zend\View\Resolver\AggregateResolver(); $map = new \Zend\View\Resolver\TemplateMapResolver(array( 'page' => __DIR__ . '/../../../view/application/page/control.phtml', )); $resolver->attach($map); $renderer->setResolver($resolver); $vm = new ViewModel(); $pages = get_object_vars($paginator->getPages('Elastic')); $vm->setTemplate('page'); if (is_array($pages)) { $vm->setVariables($pages); } $pageHtml = $renderer->render($vm); $response = $this->getResponse(); $response->setContent(json_encode(array('data'=>$paginator->getCurrentItems()->toArray(),'pageHtml'=>$pageHtml))); return $response; }
Ajax方式加载列表的test-page.phtml模板代码(这里是演示代码,js直接写在模板里了,正式编码放置另外单独JS文件,便于维护及缓存管理):
<html> <body> <h1>Example</h1> <div class="ajaxContent"> </div> <script> var PageManager = { init:function(){ this.loadDataList(1); this.changePage(); }, changePage:function(){ var obj = this; $('.ajaxContent').on('click','.paginationControl a',function(e){ e.preventDefault(); var href = this.href; var ps = href.match(/page=\d+/gi); var page = 0; if(ps.length>0){ page = ps[0].substring(5); } if(page>0){ obj.loadDataList(page); } }); }, loadDataList:function(page){ $.ajax({ type:'GET', url:'/application/pagination-test/ajax?page='+page, dataType:'json', success:function(json){ var str = '<ul>'; $.each(json.data,function(i,item){ str += '<li>'+item.value+'</li>'; }); str += '</ul>'; str += json.pageHtml; $('.ajaxContent').html(str); } }); } }; $(function(){ PageManager.init(); }); </script> </body> </html>
发表评论
-
[BASE] file_get_contents通过代理获取网络地址内容
2013-04-26 22:12 940$opt = array( 'http'=> ... -
graphviz + php 画图
2013-04-21 21:20 1250header("Content-type:imag ... -
往事重提:php弱类型之比较
2013-04-21 19:59 674php是弱类型语言, 比如 变量$v的值为: 0 , fal ... -
openSuse系统安装amp纪要
2013-04-21 19:39 1232*inux系列系统,都有一个工具安装命令,比如:centos ... -
点击自定义按钮上传图片的一种方式
2012-12-28 00:01 1737由于上传文件的选择框在界面上占位置且不大好看,而且不同浏览器的 ... -
php5.3 安装GD库支持
2012-12-23 22:33 0如果你先安装了php5.3.*, 却发现没有安装成功gd库(比 ... -
利用Git的composer 部署Minify
2012-12-07 02:29 0利用GIt 的composer 部署minify -
CodeIgniter框架全面去除URL中的index.php
2012-11-25 20:35 4194CodeIgniter框架的所有入口都是index.php, ... -
json_decode 整形溢出问题
2012-03-23 13:52 1757最近调用一些网站的接口, 返回数据都是JSON格式, 用jso ... -
递归显示当前目录树,可自定义结点标记
2012-03-13 13:58 949//静态层级数 static $i = 0; //递归 ... -
根据用户IP调度不同节点之哈希散列方式
2011-08-21 00:46 745php一致性hash类下载地址:http://code.goo ... -
字符串分隔数组及排序
2011-08-16 23:50 793<?php $str = 'Apple Strawbe ... -
include() 与 require() 举例区别
2011-08-16 23:18 8581.报错include引入文件时,如果遇到错误,会报出Warn ... -
[php基础]php环境变量
2011-08-16 23:03 862php有哪些环境变量?写出所有短变量与相应的长变量 注 ...
相关推荐
GST-ZF-520Z火灾显示盘是专为消防监控设计的一款汉字显示设备,主要用来显示火警位置和相关信息,并发出声光报警信号。该显示盘由单片机控制,适用于与GST系列火灾报警控制器配套使用,如GST200、GST500等,也可在多...
在本文中,我们将深入探讨ZF2(Zend Framework 2)框架中的模板系统,以及如何创建一个模板实例。ZF2是一个广泛使用的PHP全功能框架,它提供了丰富的工具和组件,用于构建高质量、可维护的Web应用。模板是展示层的...
`ZF2`是`Zend`公司推出的一个开源、面向对象的Web应用程序开发框架,它遵循MVC(模型-视图-控制器)设计模式,提供了一套完整的开发工具和组件,旨在提高开发效率和代码质量。 1. **MVC架构** `ZF2`的核心理念是...
本文将深入探讨ZF2中的两个核心组件——路由(Router)和加载器(Loader),它们在应用程序的运行过程中扮演着至关重要的角色。 路由是任何Web应用的入口点,它负责解析HTTP请求,并将其映射到相应的处理程序,如...
由于ZF2的特殊结构,提供的验证码组件需要设置才能用。 终于找到这个,分享一下共同学习
// 实例化分页类 传入总记录数和每页显示的记录数 $page->setConfig('header', '共 %TOTAL_ROW% 个人用户</span>'); $page->setConfig('first', '首页'); $page->setConfig('prev', '上页'); $page->setConfig('...
虽然示例中没有展示具体的分页逻辑,但通常情况下,`PagerTag`会根据传入的参数(如页码、每页条数等)计算并显示分页信息,比如页码链接和当前页状态。 5. **自定义标签扩展**: 自定义标签可以有更复杂的逻辑,...
2. **74zf.com**:这是一个网站域名,可能涉及Web开发、网页设计、网络技术等领域。网站开发通常涵盖HTML、CSS、JavaScript等前端技术,以及PHP、Python、Java等后端技术。 3. **HTTP**:这是超文本传输协议,是...
视图脚本是负责渲染页面的部分,ZF2支持多种视图层技术,如传统的PHP模板、Smarty等。 ##### 7.1 初始化视图脚本 - 创建视图脚本文件。 - 使用ZF2提供的视图助手。 #### 八、数据库与模型 ZF2提供了强大的ORM...
在本篇文章中,我们将深入探讨如何在使用 Zend Studio 的环境中配置ZF2项目,并结合SVN进行版本控制,以及如何设置本地开发环境。 首先,为了开始一个ZF2项目,我们需要创建一个新的文件夹,这将是我们的工作目录。...
标题中的"ZF-ZFSIC-MMSE-MMSESIC_ZF_ZF-SIC_mmse_ZF_SIC_mimo_"可能表示一种MIMO(Multiple-Input Multiple-Output)通信系统的研究,其中涉及了多种信号处理技术,包括零强迫(Zero-Forcing, ZF)、逐符号干扰消除...
GST-ZF-500Z 火灾 显示盘 使用 说明书
V-BLAST系统的ZF检测ZF检测:线性检测包括ZF(迫零)和MMSE(最小均方误差),检测一般有三步:1、根据准则得到线性加权向量。2、利用线性加权向量得到判决统计量。3、对判决统计量进行判决。
2. 替换为通用的CAD字体,如"Ahy_zf.shx",看是否能解决问题。 3. 如果仍然无法显示,可以尝试使用字体转换工具,将图纸中的.shx字体转换为TrueType字体,这样更易于跨平台共享和查看。 4. 如果以上方法无效,可能...
【Laravel开发-sl-laravel-zf2-form】项目是一个结合了Laravel框架和ZF2(Zend Framework 2)表单组件的示例。这个项目旨在展示如何在Laravel 5.1环境中集成并利用ZF2的Form组件来构建强大的表单处理功能。下面将...
PhlyMongo-用于Mongo集成的ZF2模块 PhlyMongo提供了以下内容以帮助在ZF2中使用Mongo: 保湿Mongo结果集 Mongo分页器适配器 用于水合结果集的Mongo分页器适配器 Mongo,MongoDB和MongoCollection类的可配置服务工厂...
在本文中,我们将深入探讨Laravel开发中的Eloquent ORM(对象关系映射)以及它与ZF2(Zend Framework 2)的集成。Eloquent是Laravel框架的核心组件,为开发者提供了一个优雅、简洁的方式来处理数据库操作。而ZF2是另...
zf model zf 模型,一共两个,第二个.
中文手册针对的是吊车领域,而英文手册则适用于油田工业设备,显示了ZF AS-tronic变速箱在不同应用场景中的广泛应用。 **知识点详解** 1. **ZF AS-tronic技术**:ZF AS-tronic是一款由德国ZF Friedrichshafen AG...