<?php declare(strict_types=1);
namespace HyBuys\Main\Controller;
use Composer\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Shopware\Core\Framework\Routing\Annotation\Since;
use Shopware\Core\System\SalesChannel\Entity\SalesChannelRepositoryInterface;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Core\Framework\Context;
use Shopware\Storefront\Controller\StorefrontController;
use Shopware\Storefront\Framework\Cache\Annotation\HttpCache;
use Shopware\Storefront\Page\Navigation\NavigationPageLoadedHook;
use Shopware\Storefront\Page\Navigation\NavigationPageLoaderInterface;
use Shopware\Storefront\Pagelet\Menu\Offcanvas\MenuOffcanvasPageletLoadedHook;
use Shopware\Storefront\Pagelet\Menu\Offcanvas\MenuOffcanvasPageletLoaderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route(defaults={"_routeScope"={"storefront"}})
*
* @deprecated tag:v6.5.0 - reason:becomes-internal - Will be internal
*/
class NavigationController extends StorefrontController
{
protected NavigationPageLoaderInterface $navigationPageLoader;
protected MenuOffcanvasPageletLoaderInterface $offcanvasLoader;
private $mediaRepository;
private $productRepository;
/**
* @internal
*/
public function __construct(
NavigationPageLoaderInterface $navigationPageLoader,
MenuOffcanvasPageletLoaderInterface $offcanvasLoader,
EntityRepositoryInterface $mediaRepository,
SalesChannelRepositoryInterface $productRepository
)
{
$this->navigationPageLoader = $navigationPageLoader;
$this->offcanvasLoader = $offcanvasLoader;
$this->mediaRepository = $mediaRepository;
$this->productRepository = $productRepository;
}
/**
* @Since("6.0.0.0")
* @HttpCache()
* @Route("/", name="frontend.home.page", options={"seo"="true"}, methods={"GET"})
*/
public function home(Request $request, SalesChannelContext $context, Context $con): ?Response
{
$page = $this->navigationPageLoader->load($request, $context);
$this->hook(new NavigationPageLoadedHook($page, $context));
$conex = $context->getSalesChannel();
foreach ($conex->customFields["custom_homepage_popular_brands_select"] as $key => $value) {
$this->productPriceRepository = $this->container->get('product_manufacturer.repository');
$criteria2 = new Criteria();
$criteria2->addFilter(new EqualsFilter('id', $value));
$thisbrand = $this->productPriceRepository->search($criteria2, $con)->first();
$criteria3 = new Criteria();
$criteria3->addFilter(new EqualsFilter('id', $thisbrand->mediaId));
$image = $this->mediaRepository->search($criteria3, $con)->first();
$brands[] = [
"image" => $image->url ?? " ",
"name" => $thisbrand->name
];
}
// $this->productsNew = $this->container->get('product_category.repository');
$latest_products_criteria = new Criteria();
$latest_products_criteria->addFilter(new EqualsFilter('active', true));
$latest_products_criteria->addSorting(new FieldSorting('createdAt', 'DESC'));
$latest_products_criteria->setLimit(8);
$latest_products = $this->productRepository->search(
$latest_products_criteria,
$context
);
$fashiion_products_criteria = new Criteria();
$fashiion_products_criteria->addFilter(
new EqualsFilter('active', true),
new EqualsFilter('customFields.custom_product_bestseller_', true)
);
$fashiion_products_criteria->addFilter(new EqualsAnyFilter('categoryTree', ['77b959cf66de4c1590c7f9b7da3982f3']));
$fashiion_products_criteria->addSorting(new FieldSorting('createdAt', 'DESC'));
$fashiion_products_criteria->setLimit(8);
$fashion_products = $this->productRepository->search(
$fashiion_products_criteria,
$context
);
// dd($fashion_products);
$electronics_products_criteria = new Criteria();
$electronics_products_criteria->addFilter(
new EqualsFilter('active', true),
new EqualsFilter('customFields.custom_product_bestseller_', true)
);
$electronics_products_criteria->addFilter(new EqualsAnyFilter('categoryTree', ['251448b91bc742de85643f5fccd89051']));
$electronics_products_criteria->addSorting(new FieldSorting('createdAt', 'DESC'));
$electronics_products_criteria->setLimit(8);
$electronics_products = $this->productRepository->search(
$electronics_products_criteria,
$context
);
$garden_products_criteria = new Criteria();
$garden_products_criteria->addFilter(
new EqualsFilter('active', true),
new EqualsFilter('customFields.custom_product_bestseller_', true)
);
$garden_products_criteria->addFilter(new EqualsAnyFilter('categoryTree', ['991094ecffc74d3282cc72cefcc0e015']));
$garden_products_criteria->addSorting(new FieldSorting('createdAt', 'DESC'));
$garden_products_criteria->setLimit(8);
$garden_products = $this->productRepository->search(
$garden_products_criteria,
$context
);
$intros_products_criteria = new Criteria();
$intros_products_criteria->addFilter(
new EqualsFilter('active', true),
new EqualsFilter('customFields.custom_homepage_intro_product', true)
);
$intros_products_criteria->addSorting(new FieldSorting('createdAt', 'DESC'));
$intros_products_criteria->setLimit(5);
$intros_products = $this->productRepository->search(
$intros_products_criteria,
$context
);
return $this->renderStorefront('@Storefront/storefront/page/content/home.html.twig', [
'page' => $page,
'brands' => $brands,
'latest_products' => $latest_products,
'fashion_products' => $fashion_products,
'electronics_products' => $electronics_products,
'garden_products' => $garden_products,
'intros_products' => $intros_products
]);
}
/**
* @Since("6.3.3.0")
* @HttpCache()
* @Route("/navigation/{navigationId}", name="frontend.navigation.page", options={"seo"=true}, methods={"GET"})
*/
public function index(SalesChannelContext $context, Request $request): Response
{
$page = $this->navigationPageLoader->load($request, $context);
$this->hook(new NavigationPageLoadedHook($page, $context));
return $this->renderStorefront('@Storefront/storefront/page/content/index.html.twig', ['page' => $page]);
}
/**
* @Since("6.0.0.0")
* @HttpCache()
* @Route("/widgets/menu/offcanvas", name="frontend.menu.offcanvas", methods={"GET"}, defaults={"XmlHttpRequest"=true})
*/
public function offcanvas(Request $request, SalesChannelContext $context): Response
{
$page = $this->offcanvasLoader->load($request, $context);
$this->hook(new MenuOffcanvasPageletLoadedHook($page, $context));
$response = $this->renderStorefront(
'@Storefront/storefront/layout/navigation/offcanvas/navigation-pagelet.html.twig',
['page' => $page]
);
$response->headers->set('x-robots-tag', 'noindex');
return $response;
}
}