Eigene CMS-Seite mit Filter-Panel und ProductListing funktioniert nicht

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!

Hallo,

ich stehe vor dem gleichen Problem. Gab es da zwischenzeitlich eine Lösung?

Viele Grüße.

Ich habe mittlerweile festgestellt, dass die Standard-CMS-Seiten (Erlebniswelten) für die Kategorien nicht nachgebaut werden können. D.h. irgendwas ist anders wenn man versucht eine neue CMS-Seite anzulegen und die Kategorie-Seite mit den notwendigen Blöcken/Elementen nachzubauen. Kopiert man eine vorhandene Kategorie-Seite und lässt die Blöcke so wie sie sind (kann ggf. Blöcke hinzufügen), so funktioniert der Filter richtig.

Es ist richtig komisch. Das müsste sich mal jemand von Shopware anschauen. Oder man sollte die Möglichkeit haben Elemente miteinander zu verknüpfen - also Filter und Listing. Dann dürfte man das Problem nicht mehr haben.

Vielleicht hilft das weiter.

Hallo

und vielen Dank für die Antwort. So ähnlich sah meine Erfahrung leider auch aus.

Ich hab es jetzt für meine Zwecke anders gelöst, trotzdem wäre hier eine Erklärung seitens Shopware wünschenswert.

Viele Grüße.