Files
kupshop/bundles/KupShop/CatalogBundle/Controller/SearchController.php
2025-08-02 16:30:27 +02:00

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()]
);
}
}