首页 | PHP资讯 | 技术专栏 | 资源共享 | PHP培训 | PHP职场 | 图书 | PHP ON WIN | PHP圈子 | PHPer学习大本营
返回列表 回复 发帖

[组件]Zend_Paginator 山寨版翻译(翻译到基础用法)

[组件]Zend_Paginator 山寨版翻译(翻译到基础用法)

本帖最后由 七月十五 于 2009-5-16 15:21 编辑

(注:英文的看起来速度太慢了,所以简单的翻译下,当然是业余山寨版的,Just fucking Google it,翻译不对的地方大家一起修正)
第31章Zend_Paginator
目录
31.1. 导言
31.2. 用法
31.2.1. Paginating数据收集
31.2.2. 渲染网页视图脚本
31.2.2.1. 分页控件例子
31.2.2.2. 分页标签的一些说明(自己理解的)
31.3. 配置
31.4. 高级用法
31.4.1. 自定义数据源适配器
31.4.2. 自定义滚动风格
31.4.3. 缓存功能

31.1. 导言

Zend_Paginator是一种灵活的组成部分paginating收集数据和提交数据给用户。

主要设计目标Zend_Paginator如下:

Paginate任意数据,不仅关系数据库

只取回结果集的结果,需要显示

不要强迫用户坚持只有一个方式显示的数据或渲染分页控件


Zend_Paginator与其他Zend Framework的组件松散的耦合,使用户谁愿意用它独立Zend_View , Zend_Db等可以这样做



31.2. 用法


31.2.1. Paginating 数据收集


为了把数据结果在页面上分页, Zend_Paginator必须有一个通用的方式获取数据。出于这个原因,所有的数据访问是通过数据源适配器。一些适配器与Zend Framework的默认:


表31.1 Zend_Paginator的适配器


适配器描述

Array使用一个 PHP 数组
DbSelect使用一个 Zend_Db_Select 对象实例, 它会返回一个数组
DbTableSelect使用一个 Zend_Db_Table_Select 对象实例, 将返回Zend_Db_Table_Rowset_Abstract对象实例. 这提供了额外的信息的结果集,如列名
Iterator使用一个 Iterator 对象实例
Null不要使用Zend_Paginator来管理数据分页。您仍然可以利用分页控制功能。


注意:不是每一个匹配选择某一行的查询, DbSelect和DbTableSelect适配器只检索最小的数据量所需的显示当前页面。
由于这一原因,第二个查询是动态生成的,以确定总人数的匹配行。不过,可以直接供应计数或计数查询自己。见setRowCount ( )方法在DbSelect适配器以获取更多信息。

要创建一个实例Zend_Paginator ,您必须提供一个适配器的构造:


$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($array));

为方便起见,您可以利用static factory() 方法的适配器包装与Zend框架:

$paginator = Zend_Paginator::factory($array);

注意:为了避免零适配器(the Null adapter),以代替数据收集您必须提供一个项目计数其构造。

虽然在技术上这样的实例可在此状态下,在您的控制器动作,您需要告诉paginator什么页码用户要求。这使他事先通过编配页码数据。



$paginator->setCurrentPageNumber($page);



最简单的方法来追踪这个值是通过一个网址。虽然我们建议您使用Zend_Controller_Router_Interface兼容的路由器来处理,它不是一个要求。


下面是一个示例路线您可能使用的问题配置文件:



routes.example.route = articles/:articleName/:page
routes.example.defaults.controller = articles
routes.example.defaults.action = view
routes.example.defaults.page = 1
routes.example.reqs.articleName = \w+
routes.example.reqs.page = \d+


上述路线(和使用Zend Framework的MVC模式的组成部分) ,您可以设定当前页数成这样:



$paginator->setCurrentPageNumber($this->_getParam('page'));

还有其他可供选择;更多关于它们的参考配置。



最后,您需要指定paginator实例化您的view。如果您使用Zend_View行动与ViewRenderer助手,下面的工作:



$this->view->paginator = $paginator;

31.2.2 渲染网页视图脚本


认为脚本是用来提供网页项目(如果您使用的是Zend_Paginator这样做) ,并显示分页控制。



由于Zend_Paginator执行声压级接口(the SPL interface)IteratorAggregate ,循环您的项目,并展示他们的很简单
<html>
<body>
<h1>Example</h1>
<?php if (count($this->paginator)): ?>
<ul>
<?php foreach ($this->paginator as $item): ?>
  <li><?= $item; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>

<?= $this->paginationControl($this->paginator,
                             'Sliding',
                             'my_pagination_control.phtml'); ?>
</body>
</html>


声明认为助手呼吁接近尾声。 PaginationControl接受多达4个参数: the paginator instance, a scrolling style, a view partial,以及一系列其他参数。

第二和第三个参数是非常重要的。而鉴于部分是用来确定如何分页控制应该看看,滚动式是用来控制它应如何行事。the view partial 是搜索分页控制的一个形式,类似下面:
[attach]66[/attach]
        
会发生什么事当用户点击“下一页”链接了几次?那么,任何数量的事情可能发生。目前的网页数目可以留在中间您通过点击(就像在Yahoo ! ),也可以提前结束页面范围,然后再次出现在左边当用户点击“下一步”一个更多的时间。网页数量甚至可能扩大和合同的用户预付款(或“scrolls” )通过他们(因为他们对谷歌)【原句是The page numbers might even expand and contract as the user advances (or "scrolls") through them (as they do on Google).
】 。

有四个滚动风格包装与Zend框架:

表 31.2. Zend_Paginator的滚动样式
滚动样式描述
All回报的每一页。这是有益的下拉菜单分页控件与相对较少的网页。在这种情况下,你想要的所有网页,提供给用户一次。
Elastic象谷歌一样滚动式的,可扩大和合同作为用户通过网页卷轴。
Jumping 用户浏览通过,页码进步的结尾某一范围内,然后开始再次开始新的范围。
Sliding雅虎!样滚动风格,当前位置的网页数量为中心的网页范围,或尽可能接近。这是默认的风格。


第四个也是最后一个参数是一个可选的保留关联数组更多的变量,你要提供你的看法部分(可通过 via $this) 。举例来说,这些价值可能包括额外的URL参数分页链接。

通过设置the default view partial, default scrolling style, and view instance,您可以完全消除the calls to PaginationControl:

Zend_Paginator::setDefaultScrollingStyle('Sliding');
Zend_View_Helper_PaginationControl::setDefaultViewPartial(
    'my_pagination_control.phtml'
);
$paginator->setView($view);

当所有这些值设定,可以使分页控制在您的视图脚本用简单的回声声明:
<?= $this->paginator; ?>

注意
当然,也可以与其他使用Zend_Paginator模板引擎。例如,您可能会与Smarty做到以下几点:
$smarty->assign('pages', $paginator->getPages());

然后,您可以访问paginator值从模板象这样:
{$pages.pageCount}

31.2.2.1 分页控件例子

下面的分页控件例子有望帮助您开始:
搜索分页

[php]<!--
See http://developer.yahoo.com/ypatt ... rn=searchpagination
-->

<?php if ($this->pageCount): ?>
<div class="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
  <a href="<?= $this->url(array('page' => $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="<?= $this->url(array('page' => $page)); ?>">
        <?= $page; ?>
    </a> |
  <?php else: ?>
    <?= $page; ?> |
  <?php endif; ?>
<?php endforeach; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
  <a href="<?= $this->url(array('page' => $this->next)); ?>">
    Next >
  </a>
<?php else: ?>
  <span class="disabled">Next ></span>
<?php endif; ?>
</div>
<?php endif; ?>[/php]

项目页码
[php]<!--
See http://developer.yahoo.com/ypatt ... tern=itempagination
-->

<?php if ($this->pageCount): ?>
<div class="paginationControl">
<?= $this->firstItemNumber; ?> - <?= $this->lastItemNumber; ?>
of <?= $this->totalItemCount; ?>

<!-- First page link -->
<?php if (isset($this->previous)): ?>
  <a href="<?= $this->url(array('page' => $this->first)); ?>">
    First
  </a> |
<?php else: ?>
  <span class="disabled">First</span> |
<?php endif; ?>

<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
  <a href="<?= $this->url(array('page' => $this->previous)); ?>">
    < Previous
  </a> |
<?php else: ?>
  <span class="disabled">< Previous</span> |
<?php endif; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
  <a href="<?= $this->url(array('page' => $this->next)); ?>">
    Next >
  </a> |
<?php else: ?>
  <span class="disabled">Next ></span> |
<?php endif; ?>

<!-- Last page link -->
<?php if (isset($this->next)): ?>
  <a href="<?= $this->url(array('page' => $this->last)); ?>">
    Last
  </a>
<?php else: ?>
  <span class="disabled">Last</span>
<?php endif; ?>

</div>
<?php endif; ?>
[/php]
下拉式分页
[php]<?php if ($this->pageCount): ?>
<select id="paginationControl" size="1">
<?php foreach ($this->pagesInRange as $page): ?>
  <?php $selected = ($page == $this->current) ? ' selected="selected"' : ''; ?>
  <option value="<?= $this->url(array('page' => $page)); ?>"<?= $selected ?>>
    <?= $page; ?>
  </option>
<?php endforeach; ?>
</select>
<?php endif; ?>

<script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js">
</script>
<script type="text/javascript">
$('paginationControl').observe('change', function() {
    window.location = this.options[this.selectedIndex].value;
})
</script>
[/php]
31.2.2.2. 属性清单
下面的选项可以控制分页查看partials :

表31.3 可查看的分页属性
属性类型描述
firstinteger第一页编号(即1 )
firstItemNumberinteger绝对数量上的第一个项目此页
firstPageInRangeinteger第一页的范围传回的滚动式
currentinteger当前页码
currentItemCountinteger此页项目数量
itemCountPerPageinteger提供给每一页的最大的项目数量
lastinteger最后一页编号
lastItemNumberinteger绝对数量上的最后一个项目此页
lastPageInRangeinteger最后一页的范围传回的滚动式
nextinteger下一页
pageCountinteger总页数
pagesInRangearray滚动式返回的页数组(Array of pages returned by the scrolling style )
previousinteger前一页
totalItemCountinteger项目总数


31.3. 配置
Zend_Paginator有几个配置方法,可称为:

表31.4 配置方法Zend_Paginator
方法描述
setCurrentPageNumber设定当前页面数量(默认是1 ) 。
setItemCountPerPage设定网页上显示项目的最大数量(默认10 ) 。
setPageRange

设置要显示的项目数量在分页控制(默认10 ) 。注意:在大多数情况下,这一数字将坚持到底,但滚动风格可以选择只把它作为一项准则或开始价值(例如,弹性(Elastic)) 。


setView

为了渲染便利,设定the view instance


泛团网 haofine.com 精品团购每一天

ZendFramework的文档已经和PHP的文档一样了,N久都没有被翻译过了,许多地方都过时了

我就有点纳闷了,PHPChina自称Zend的中国官方,为什么对翻译文档这种事就一点都不积极呢??但是却对举办这个PHP培训,那个PHP培训却来那么来劲呢?我分析的原因就是money,翻译手册又没利可图,但是搞培训就不一样了。

我感觉与其搞这个培训那个培训的,不如把文档好好翻译下对中国的PHPer更有好处,也对PHP在中国的发展更有好处。

当然了,我对翻译文档也没什么贡献,大家可能说我没资格说这种话,但是我就是要把心里话说出来,爱咋咋地!!

TOP

so nb           Just fucking Google it  只靠google

TOP

原帖由 ivan820819 于 2009-2-26 09:06 发表
ZendFramework的文档已经和PHP的文档一样了,N久都没有被翻译过了,许多地方都过时了

我就有点纳闷了,PHPChina自称Zend的中国官方,为什么对翻译文档这种事就一点都不积极呢??但是却对举办这个PHP培训,那个PH ...


有钱的出钱,没钱的出力。
程序员出脑力~

TOP

原帖由 ivan820819 于 2009-2-26 09:06 发表
ZendFramework的文档已经和PHP的文档一样了,N久都没有被翻译过了,许多地方都过时了

我就有点纳闷了,PHPChina自称Zend的中国官方,为什么对翻译文档这种事就一点都不积极呢??但是却对举办这个PHP培训,那个PH ...


曾记得早年间,在phpx的时候,学术气氛很浓啊!

phpchina在这方面做的真的很差,我现在订阅博客都在博客园,可那是个.NET的技术社区。

你看phpchina上,除了几位大牛不定期的出现一下,有分量的文章真少。

TOP

楼上的,你以为这里是CSDN或者javaeye啊~

TOP

关键是能让参与翻译的人得到了什么
每个人的价值取向有一定的差异
短期和长期价值取向又不一定一样
周围的氛围也造成一定的影响
万事开头难,坚持下去就更难

TOP

有力的或许无心
有心的可能无力
力量分散,拧不起来

TOP

原帖由 yoursjzz 于 2009-2-26 15:54 发表
楼上的,你以为这里是CSDN或者javaeye啊~


我不知道为什么你这样说,但是好像CSDN和微软,javaeye和SUN 都没什么关系吧!

而phpchina和zend却有着培训协议。

有这个先天条件,为什么社区却不火呢。

看不到什么高技术含量的东西呢!

TOP

phpchina 已经变成娱乐论坛了,每天80%+的发帖都在水区,很强大。。。。

TOP

返回列表