public function listAction(Request $request, $page) { $articleSearch = new ArticleSearch(); $articleSearch->handleRequest($request); // we create an "anonym" form to pass parameters in GET and have a nice url $articleSearchForm = $this->get('form.factory')->createNamed('', 'article_search_type', $articleSearch, array('action' => $this->generateUrl('obtao-article-search'), 'method' => 'GET')); $articleSearchForm->handleRequest($request); $articleSearch = $articleSearchForm->getData(); // we pass our search object to the search repository $results = $this->getSearchRepository()->searchArticles($articleSearch); $adapter = new ArrayAdapter($results); $pager = new Pagerfanta($adapter); $pager->setMaxPerPage($articleSearch->getPerPage()); $pager->setCurrentPage($page); return $this->render('ObtaoBlogBundle:Article:list.html.twig', array('results' => $pager->getCurrentPageResults(), 'pager' => $pager, 'articleSearchForm' => $articleSearchForm->createView())); }
public function getQueryForSearch(ArticleSearch $articleSearch) { // we create a query to return all the articles // but if the criteria title is specified, we use it if ($articleSearch->getTitle() !== null && $articleSearch != '') { $query = new \Elastica\Query\Match(); $query->setFieldQuery('article.title', $articleSearch->getTitle()); $query->setFieldFuzziness('article.title', 0.7); $query->setFieldMinimumShouldMatch('article.title', '80%'); } else { $query = new \Elastica\Query\MatchAll(); } // then we create filters depending on the chosen criterias $boolQuery = new \Elastica\Query\Bool(); $boolQuery->addMust($query); /* Dates filter We add this filter only the ispublished filter is not at "false" */ if ("false" != $articleSearch->isPublished() && null !== $articleSearch->getDateFrom() && null !== $articleSearch->getDateTo()) { $boolQuery->addMust(new \Elastica\Query\Range('publishedAt', array('gte' => \Elastica\Util::convertDate($articleSearch->getDateFrom()->getTimestamp()), 'lte' => \Elastica\Util::convertDate($articleSearch->getDateTo()->getTimestamp())))); } // Published or not filter if ($articleSearch->isPublished() !== null) { $boolQuery->addMust(new \Elastica\Query\Terms('published', array($articleSearch->isPublished()))); } $query = new \Elastica\Query($boolQuery); $query->setSort(array($articleSearch->getSort() => array('order' => $articleSearch->getDirection()))); return $query; }