Zend Paginator过滤结果

时间:2013-09-16 13:08:07

标签: zend-framework zend-paginator

我有一个使用Zend Paginator的结果集,它的工作正常但我需要使用eBay,Amazon等复选框选项来过滤结果。

我已阅读有关Zend过滤器的信息,但不知道从哪里开始。

有人有这方面的经验吗?

由于

约翰

2 个答案:

答案 0 :(得分:1)

Zend_Filter将某些东西转化为某种东西,比如翻译。

Zend_Paginator的巨大优势在于它逐页检索数据。弄清楚你想要从几百万个表中显示30个项目。如果您检索所有数据然后相应地过滤以取出这30个项目,那将是一个非常缓慢的过程。

假设您要从数据库中检索项目,则应使用DbSelectDbTableSelect适配器。如果您从一个表中检索,请使用DbTableSelect;如果您通过加入从多个表中检索,请使用DbSelect

一旦您拥有了$select对象,您将使用该对象检索所有页面中的所有项目,分页器将通过设置限制和偏移量逐页检索项目。例如,如果每页显示30个项目并且要显示页码3,则分页器将设置$select->limit(30, 60)(您不需要执行此操作,分页器会为您执行此操作)。要完成此操作,请在控制器中尝试以下操作:

// pass ?page=N in the url
$pageNumber = $this->getRequest()->getParam('page', 1);
// itemsPerPage can also be read from the url
$itemsPerPage = 30;
// this $select must retrieve all items in all pages
$select = new Zend_Db_Select();
$select->from(...)
    // eventually joins, where, or order statements
$paginator = new Zend_Paginator($select);
$paginator->setCurrentPageNumber($pageNumber);
$paginator->setItemCountPerPage($itemsPerPage);

您最终需要将分页器传递给模板,以呈现项目和分页控件。所以添加

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

并按照http://framework.zend.com/manual/1.12/en/zend.paginator.usage.html#zend.paginator.rendering

编辑模板

所以这是分页器的基本功能。我希望这有帮助。如果您使用其他类型的适配器,例如ArrayIterator,则会非常相似。

答案 1 :(得分:0)

复选框选项与Zend_Paginator无关。

Zend_Paginator只是一个Helper类,可以帮助您对结果进行分页,它添加了LIMIT子句并使结果更容易模板化,仅此而已。

您所关注的内容称为“Faceted search”,您必须开发其背后的逻辑或使用像Solr这样可以自动生成它的搜索引擎