71 lines
2.3 KiB
PHP
71 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace KupShop\CatalogBundle\Controller;
|
|
|
|
use KupShop\CatalogBundle\View\CategoryRequestHandler;
|
|
use KupShop\CatalogBundle\View\SearchPreloadView;
|
|
use KupShop\CatalogBundle\View\SearchView;
|
|
use KupShop\CatalogElasticBundle\View\SectionView;
|
|
use KupShop\KupShopBundle\Routing\SimpleTranslatedRoute;
|
|
use KupShop\KupShopBundle\Views\View;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
|
|
class SearchController extends AbstractController
|
|
{
|
|
/**
|
|
* @SimpleTranslatedRoute("search")
|
|
*/
|
|
public function searchAction(Request $request, #[Autowire(service: SearchView::class)] View $view): Response
|
|
{
|
|
if ($suggested_url = $request->get('suggested_url', '')) {
|
|
return new RedirectResponse($suggested_url);
|
|
}
|
|
|
|
$search_term = $request->get('search', '');
|
|
if ($search_term) {
|
|
if (is_array($search_term)) {
|
|
$search_term = implode(' ', $search_term);
|
|
}
|
|
|
|
if (method_exists($view, 'setSearchTerm')) {
|
|
$view->setSearchTerm(trim((string) $search_term));
|
|
}
|
|
}
|
|
|
|
if ($view instanceof SectionView) {
|
|
// Pass search term to dynamic filter
|
|
$dynamicFilter = $request->get('dynamic_filter', []);
|
|
$dynamicFilter['search'] = $search_term;
|
|
$request->query->set('dynamic_filter', $dynamicFilter);
|
|
|
|
$view->setTemplate('search.tpl');
|
|
$view->setCategoryId(CategoryRequestHandler::SEARCH_CATEGORY_ID);
|
|
$view->setFilterData($request->get('dynamic_filter', []));
|
|
|
|
if ($page = $request->query->get('page')) {
|
|
$view->setPage((int) $page);
|
|
}
|
|
} else {
|
|
$view->setRequest($request);
|
|
}
|
|
|
|
return $view->getResponse($request);
|
|
}
|
|
|
|
/**
|
|
* @Route("/_shop/search-preload/")
|
|
*/
|
|
public function searchPreload(SearchPreloadView $preloadView): Response
|
|
{
|
|
return new JsonResponse(
|
|
['html' => $preloadView->getResponse()->getContent()]
|
|
);
|
|
}
|
|
}
|