Wie erstellt man SEO Urls?

Moin, ich möchte nun für mein custom Storefront controller SEO Urls generieren. Leider finde ich nichts passendes in der Doku… Hat hier jemand einen Tip für mich?

VG Philipp

Ich habe letztens Seo Urls in unseren Covid-19 Projekt eingefügt. Kannst gern da abschauen: https://github.com/shopwareDowntown/downtown/commit/485078103f9bf75c2ed269e7e886abc997fc012f

 

Brauchst nur die SeoRoute Klasse und die jeweilige Config für das Admin

1 „Gefällt mir“

Okay danke soweit :slight_smile:

Nun habe ich die Klassen angelegt und die Config in der Datenbank, jedoch scheint er hier Probleme mit der Validierung zu haben:

Woran könnte das liegen?

Die Entity ist: cogi_glossary --> In den Beispielen habe ich aber nur Entities ohne Unterstich

Der Route-Name lautet: cogi-glossary.entry --> vllt mag er den Bindestrich nicht?

glossaryDefinition = $glossaryDefinition;
        $this->repository = $repository;
    }

    public function getConfig(): SeoUrlRouteConfig
    {
        return new SeoUrlRouteConfig(
            $this->glossaryDefinition,
            self::ROUTE_NAME,
            self::DEFAULT_TEMPLATE
        );
    }

    public function getMapping(Entity $glossary, ?SalesChannelEntity $salesChannel): SeoUrlMapping
    {
        if (!$glossary instanceof GlossaryEntity) {
            throw new \InvalidArgumentException('Expected GlossaryEntity');
        }

        return new SeoUrlMapping(
            $glossary,
            ['glossaryId' => $glossary->getId()],
            [
                'glossary' => $glossary->jsonSerialize(),
            ]
        );
    }

    public function extractIdsToUpdate(EntityWrittenContainerEvent $event): SeoUrlExtractIdResult
    {
        $ids = [];

        // check if a glossary was written. If this is the case, its Seo Url must be updated.
        $glossaryEvent = $event->getEventByEntityName(GlossaryDefinition::ENTITY_NAME);
        if ($glossaryEvent) {
            $ids = $glossaryEvent->getIds();
        }

        return new SeoUrlExtractIdResult($ids);
    }

    public function prepareCriteria(Criteria $criteria): void
    {
    }

    public function getSeoVariables(): array
    {
        return [];
    }

}

 

 

Ahh okay, ich glaube ich weiß was es ist…

Some mandatory parameters are missing ("char", "cogiGlossaryId") to generate a URL for route "cogi-glossary.entry".

Im Controller muss firstChar stehen, dann sollte es gehen.