Hallo Leute,
ich habe ein Problem, womit ich nicht weiterkomme. Ich möchte gerne über einen eigenen Controller eine CMS-Seite (die ich im Backend erstellt habe) aufrufen. Also der Content der Seite soll über eine CMS-Seite pflegbar sein. Die CMS-Seite habe ein Text-Block, einen Filter-Block und ein Produktlisting-Block.
Soweit funktioniert der Seitenaufruf und die 3 Blöcke werden richtig dargestellt. Das Problem ist jetzt nur, dass wenn ich im Filter etwas auswähle, die Produkte im Listing nicht aktualisiert werden, aber im der Adressleiste des Browsers die ausgewählten Filter sichtbar sind. Wenn ich dann die komplette Seite aktualisiere dann greift der Filter.
War mache ich Falsch?
Controller:
#[Route(path: '/verlage/{publisherName}', name: 'frontend.publisher.view', methods: ['GET'])]
public function publisherView(Request $request, SalesChannelContext $context): Response
{
$pathInfo = $request->getPathInfo();
$manufacturerRepo = $this->container->get('product_manufacturer.repository');
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('link', $pathInfo));
$manufacturer = $manufacturerRepo->search($criteria, $context->getContext())->first();
if (!$manufacturer) {
return $this->redirectToRoute('frontend.home.page');
}
$cmsPageId = '01921f11944376eba3149b32c8d25a26';
//$request->query->set('manufacturer', $manufacturer->getId()); //--- filter by manufacturer
//--- create resolver for variables on cms
$resolverContext = new EntityResolverContext($context, $request, $this->productManufacturerDefinition, $manufacturer);
$page = $this->navigationPageLoader->load($request, $context);
$pages = $this->cmsPageLoader->load(
$request,
$this->createCriteria($cmsPageId, $request),
$context,
null,
$resolverContext
);
$page->setCmsPage($pages->get($cmsPageId));
return $this->renderStorefront(
'@Storefront/storefront/page/content/index.html.twig',
['page' => $page,'manufacturer' => $manufacturer]
);
}
private function createCriteria(string $pageId, Request $request): Criteria
{
$criteria = new Criteria([$pageId]);
$criteria->setTitle('publisher::cms-page');
$slots = $request->get('slots');
if (\is_string($slots)) {
$slots = explode('|', $slots);
}
if (!empty($slots) && \is_array($slots)) {
$criteria->getAssociation('sections.blocks')
->addFilter(new EqualsAnyFilter('slots.id', $slots));
}
return $criteria;
}
Könnt ihr mir sagen, was ich falsch mache bzw. was noch fehlt? Es sollte also so funktionieren wie auf einer Kategorieseite.
Vielen Dank!