Context eines SubShops erzeugen

Hallo zusammen,

ich möchte mir gerne alle SEO-Urls einer Kategorie für alle Subshops ausgeben lassen. Sprich es gibt z.B. drei Subshops, die drei unterschiedliche Übersetzungen und somit Seo-Links für ein und dieselbe Kategorie haben.

Die einzige Möglichkeit, die ich dafür sehe, ist, der assemble()-Methode des Routers ein Context-Objekt für den jeweiligen Subshop zu übergeben, richtig? Oder kennt jemand eine andere Möglichkeit?

Dafür ist es nötig, den Context für einen Subshop zu erzeugen. Muss ich das mühsam „händisch“ machen oder gibt es dafür eine einface Methode, der ich z.B. nur die Subshop-Id übergeben muss und im return den entsprechenden Context erhalte?

Viele Grüße
Malte :slight_smile:

Hallo Malte,

das hat der @Synonymous‍ hier ganz gut festgehalten: https://synonymous.rocks/zugriff-auf-den-shop-context-im-shopware-cli-modus/

1 Like

Super, dankeschön! Damit klappt es tatsächlich sehr einfach!

hi, ich habe hier noch ein Problem. Ich mache es im grunde genau so wie in den Blog-Post gezeigt. Das funktioniert auf Apache auch wunderbar, auf nginx leider nicht. 

In der Zeile 

$context = \Shopware\Components\Routing\Context::createFromShop(
                    $shop,
                    Shopware()->Container()->get('config')
                );

steigt er ohne fehlermeldung aus und gibt nichts zurück.

hier der gesamte Code:

                $repository = Shopware()->Container()->get('models')->getRepository('Shopware\Models\Shop\Shop');
                $shop = $repository->getActiveById(1);
                $shop->registerResources();
                $context = \Shopware\Components\Routing\Context::createFromShop(
                    $shop,
                    Shopware()->Container()->get('config')
                );
                Shopware()->Container()->get('router')->setContext($context);
                $url = Shopware()->Front()->Router()->assemble(array('module' => 'frontend', 'controller' => 'index'));
                
                return $url;

jemand eine Idee?

@hbee schrieb:

In der Zeile 

$context = \Shopware\Components\Routing\Context::createFromShop(
$shop,
Shopware()->Container()->get(‘config’)
);

steigt er ohne fehlermeldung aus und gibt nichts zurück.

Sieht eigentlich soweit ganz gut aus, unterscheidet sich zu dem Code welchen ich dafür benutze nur in folgender Zeile.

$shop->registerResources();

//vs.

$shop->registerResources(Shopware()->Bootstrap());

 Probiere hier mal bitte noch Shopware()->Bootstrap() in die registerResources Funktion zu übergeben.