我有一个使用Zend Paginator的结果集,它的工作正常但我需要使用eBay,Amazon等复选框选项来过滤结果。
我已阅读有关Zend过滤器的信息,但不知道从哪里开始。
有人有这方面的经验吗?
由于
约翰
答案 0 :(得分:1)
Zend_Filter将某些东西转化为某种东西,比如翻译。
Zend_Paginator的巨大优势在于它逐页检索数据。弄清楚你想要从几百万个表中显示30个项目。如果您检索所有数据然后相应地过滤以取出这30个项目,那将是一个非常缓慢的过程。
假设您要从数据库中检索项目,则应使用DbSelect
或DbTableSelect
适配器。如果您从一个表中检索,请使用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
编辑模板所以这是分页器的基本功能。我希望这有帮助。如果您使用其他类型的适配器,例如Array
或Iterator
,则会非常相似。
答案 1 :(得分:0)
复选框选项与Zend_Paginator无关。
Zend_Paginator只是一个Helper类,可以帮助您对结果进行分页,它添加了LIMIT子句并使结果更容易模板化,仅此而已。
您所关注的内容称为“Faceted search”,您必须开发其背后的逻辑或使用像Solr这样可以自动生成它的搜索引擎