<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\Document;
use Pimcore\Model\Asset;
use Pimcore\Model\Search\Backend\Data;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class FrontendSearchController extends FrontendController
{
/**
* @param Request $request
*
* @return Response
*
* @throws \Exception
*/
/**
* @param Request $request
*
* @return Response
*/
public function searchAction(Request $request, PaginatorInterface $paginator)
{
$params = $request->query->all();
$query = $request->query->get('query');
$searcherList = new Data\Listing();
$db = \Pimcore\Db::get();
$queryCondition = "( MATCH (data,properties) AGAINST (" . $db->quote($query) . " IN BOOLEAN MODE) )";
$searcherList->setCondition($queryCondition);
$hits = $searcherList->load();
$elements = array();
foreach ($hits as $hit) {
$element = \Pimcore\Model\Element\Service::getElementById($hit->getId()->getType(), $hit->getId()->getId());
if ($element instanceof Document && $element->isPublished()) {
$elements[] = $element;
} elseif ($element instanceof Asset) {
if ($element->getType() == 'document') {
$elements[] = $element;
}
} elseif ($element instanceof \Pimcore\Model\DataObject\AbstractObject && $element->getType() != "folder" && $element->isPublished()) {
//print_r(get_class_methods($element));
if (in_array($element->getClassName(), array("Event", "ServiceProvider", "News", "Blog", "Project", "RdResourceItem", "ResourceItem"))) {
$elements[] = $element;
}
}
}
$paginator = $paginator->paginate(
$elements,
$request->get('page', 1),
10
);
return $this->render('search/result.html.twig', [
'results' => $elements,
'paginationVariables' => $paginator->getPaginationData(),
'params' => $params,
'pagedresults' => $paginator,
'hitcount' => count($elements)
]);
}
}