<?php declare(strict_types=1);
namespace HyBuys\Main\Controller;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Shopware\Storefront\Page\Navigation\NavigationPageLoadedHook;
use Shopware\Storefront\Page\Navigation\NavigationPageLoaderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Shopware\Core\Framework\Context;
use Symfony\Component\Routing\Annotation\Route;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\System\SalesChannel\Entity\SalesChannelRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Storefront\Page\GenericPageLoader;
/**
* @RouteScope (scopes={"storefront"})
*/
class HelperController extends StorefrontController
{
private $categoryRepository;
private $productRepository;
protected $genericPageLoader;
private $mediaRepository;
protected NavigationPageLoaderInterface $navigationPageLoader;
public function __construct(
GenericPageLoader $genericPageLoader,
SalesChannelRepositoryInterface $categoryRepository,
SalesChannelRepositoryInterface $productRepository,
EntityRepositoryInterface $mediaRepository,
NavigationPageLoaderInterface $navigationPageLoader
)
{
$this->categoryRepository = $categoryRepository;
$this->productRepository = $productRepository;
$this->genericPageLoader = $genericPageLoader;
$this->mediaRepository = $mediaRepository;
$this->navigationPageLoader = $navigationPageLoader;
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/brands", name="frontend.brands.list", methods={"GET"})
*/
public function brandsList(Request $request, SalesChannelContext $salesChannelContext, Context $con): Response
{
$this->productPriceRepository = $this->container->get('product_manufacturer.repository');
$criteria = new Criteria();
$criteria->addAssociation('cover');
// $criteria->setLimit(1);
$criteria->addAssociation('options.group');
$brands = $this->productPriceRepository->search($criteria, $con);
$page = $this->genericPageLoader->load($request, $salesChannelContext);
if ($metaInformation = $page->getMetaInformation()) {
$metaInformation->setMetaTitle($metaTitle ?? 'Brands list');
$page->setMetaInformation($metaInformation);
}
return $this->renderStorefront('@HyBuys/storefront/page/content/brands-list.html.twig', [
'brands' => $brands->getElements(),
'page' => $page
]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/ajax/get/brands", name="frontend.get.categorybrands", defaults={"csrf_protected"=false,"XmlHttpRequest"=true}, methods={"GET"})
*/
public function getCategoryBrands(Request $request, SalesChannelContext $salesChannelContext, Context $con): Response
{
// $productData = $this->categoryRepository->search(
// (new Criteria())->addFilter(new EqualsFilter('id', 'fc8259221f4b4643b0f922b21c6a5e3f')),
// $Context
// )->getElements();
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('category.id', $request->query->get('category')));
$criteria->setLimit(1);
$category = $this->categoryRepository->search($criteria, $salesChannelContext)->first();
foreach ($category->customFields['custom_manuf_brand'] 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->url ?? " ";
}
return $this->json($brands);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/ex", name="frontend.say.xallo", methods={"GET"})
*/
public function sayXallo(Request $request, SalesChannelContext $salesChannelContext, Context $con): Response
{
$this->productPriceRepository = $this->container->get('product.repository');
$criteria2 = new Criteria();
$criteria2->addFilter(new ContainsFilter('categoryTree', '77b959cf66de4c1590c7f9b7da3982f3'));
$productPrice = $this->productPriceRepository->search($criteria2, $con);
// $page = $this->genericPageLoader->load('fc8259221f4b4643b0f922b21c6a5e3f', $salesChannelContext);
dd($productPrice);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/examplet", name="frontend.say.hello", methods={"GET"})
*/
public function sayHello(Request $request, SalesChannelContext $salesChannelContext, Context $con): Response
{
// $productData = $this->categoryRepository->search(
// (new Criteria())->addFilter(new EqualsFilter('id', 'fc8259221f4b4643b0f922b21c6a5e3f')),
// $Context
// )->getElements();
// $criteria = new Criteria();
// $criteria->addAssociation('cover');
// // $criteria->setLimit(1);
// $criteria->addAssociation('options.group');
// $categories = $this->categoryRepository->search($criteria, $salesChannelContext);
// using current class reference controller
$this->productPriceRepository = $this->container->get('product_manufacturer.repository');
$criteria2 = new Criteria();
$criteria2->addFilter(new EqualsFilter('id', '15946fd469a2402891eb9a3f0b473343'));
$productPrice = $this->productPriceRepository->search($criteria2, $con);
// $page = $this->genericPageLoader->load('fc8259221f4b4643b0f922b21c6a5e3f', $salesChannelContext);
dd($productPrice);
return $this->renderStorefront('@HyBuys/storefront/page/example.html.twig', [
'example' => 'Hello world2',
'page' => $page,
'categories' => $categories
]);
}
/**
* @Route("/e", name="frontend.say.e", methods={"GET"})
*/
public function sayE(Request $request, SalesChannelContext $salesChannelContext, Context $con): Response
{
$criteria = new Criteria();
$criteria->addAssociation('cover');
// $criteria->setLimit(1);
$criteria->addAssociation('options.group');
$categories = $this->categoryRepository->search($criteria, $salesChannelContext);
dd($categories);
return $this->renderStorefront('@HyBuys/storefront/page/example.html.twig', [
'example' => 'Hello world'
]);
}
}