如果按照ZEND的手册,在使用Zend_Paginator类的时候有两种方法,一种是直接new,一种是用factory
当然,用factory是很方便的。只需要Zend_Paginator::factory( $array )就行了
可是,如果这个array很大怎么办?它没有说。。
即使是new Zend_Paginator( Zend_Db_xxx ?$array )[不记得括号中是哪个abstract了],如果数据量大,他也没办法的呀??
今天白天我试着一下子查询了1W多条,立马死掉。
我看网上的例子,大多是要么直接传结果,要么是传 ZEND_DB的查询对象进去。但结果集都不大的,所以顺利运行 了。我不知道结果集是上万的时候会怎么样,呵呵
最后我是采用了先COUNT出总数,然后用range生成一个大数组传组 Zend_Paginator::factory() ,因为我看他里面的计数是用count的,所以我对factory的数组参数就直接传了这个range出来的数组给它。
结果,成功了,看来,这也就可以了。只是方法有点妖而己。。
记录一下,备忘一下。
Config文件
[paginator]
page.pagemax = 10
page.pagestart = 1
page.itemperpage = 25
在文件里
- <?php
- //...前面略
- $request = $this->_request ;
- $currentPage = $request->getParam('page');
- $result = $table->fetchAll( ... 条件 );
- $resultCount = $table->getCount( ... 条件 ); //文件自己实现
- $resultCountArray = range( 1, $resultCount ); //到底是从0到resultCount-1好,还是直接从1到$resultCount好,我没有仔细测试过
- $paginator = Zend_Paginator::factory( $resultCountArray );
- $paginator->setCurrentPage( $currentPage )
- ->setItemPerPage( 25 ) //这个方法可能写错了,我是凭记忆写的,请看手册
- ->setPageRange( 10 );
- $this->view->paginator = $paginator;
部分参数在获取失败的情况下,会直接从Config文件里读取,这里就不详细写了,大致应该是:
- <?php
- //.....略
- $config = new Zend_Config_Ini('...path...' , 'paginator' ); //即Config中[]包含的文字
- $pageMax = $config->page->pagemax ;
- //取出来的每条数据都是对象了