Zend Paginator Filter результаты
У меня есть набор результатов с использованием Zend Paginator, все работает нормально, но мне нужно отфильтровать результаты, используя опции-флажки, как на eBay, Amazon и т. Д.
Я читал о фильтре Zend, но не знаю, с чего начать.
У кого-нибудь есть опыт этого, пожалуйста?
Спасибо
Джон
2 ответа
Zend_Filter - это трансформировать что-то во что-то вроде переводчика.
Огромным преимуществом Zend_Paginator является то, что он получает данные постранично. Выясните, что вы хотите отобразить 30 элементов из таблицы с несколькими миллионами. Это будет очень медленный процесс, если вы извлечете все данные и затем отфильтруете их, чтобы убрать эти 30 элементов.
Предположим, что вы получаете ваши предметы из базы данных, вы должны использовать DbSelect
или же DbTableSelect
адаптер. использование DbTableSelect
если вы извлекаете из одной таблицы и DbSelect
если вы получаете из более чем одной таблицы, присоединившись.
Как только у вас есть $select
Объект, с помощью которого вы будете получать все элементы на всех страницах, paginator будет извлекать элементы постранично, устанавливая ограничение и смещение. Например, если вы отображаете 30 элементов на странице, и вы хотите отобразить страницу № 3, paginator установит $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
Так что это основная функциональность пагинатора. Надеюсь, это поможет. Было бы очень похоже, если вы используете другой тип адаптеров, таких как Array
или же Iterator
,
Опции флажков не имеют ничего общего с Zend_Paginator.
Zend_Paginator - это просто класс Helper, который помогает разбить ваши результаты на страницы, он добавляет предложение LIMIT и упрощает создание шаблонов результатов, не более того.
То, что вы ищете, называется "Фасетный поиск", вы должны разработать логику или использовать поисковик, такой как Solr, который может генерировать его автоматически