如何获取 shopware 6 中所有其他渠道的当前产品或类别 url 等价物?

How to get current product or category url equivalent for all other channels in shopware 6?

我需要在 shopware6 中构建一个“频道切换器”。我如何才能访问此商店中所有或某些其他渠道的当前 (Product)URL 等效项?它应该像语言切换器一样工作,保留当前查看的产品或类别并重定向到其他频道。

我知道如何获取产品的当前 seoUrl: {{ seoUrl('frontend.detail.page', { productId: page.product.id }) }}

但是有没有办法让所有其他销售渠道的所有其他 seoUrl 具有相同的 product.id?类别也一样吗?

获取所有语言链接的粗略方法

正在看

\Shopware\Core\Framework\Adapter\Twig\Extension\SeoUrlFunctionExtension 正在处理树枝中的 seoUrl() 它看起来像这样:

public function seoUrl(string $name, array $parameters = []): string
{
    return $this->seoUrlReplacer->generate($name, $parameters);
}

这解析为

\Shopware\Core\Content\Seo\SeoUrlPlaceholderHandler::generate 始终使用当前请求:

public function generate($name, array $parameters = []): string
{
    $path = $this->router->generate($name, $parameters, RouterInterface::ABSOLUTE_PATH);

    $request = $this->requestStack->getMainRequest();
    $basePath = $request ? $request->getBasePath() : '';
    $path = $this->removePrefix($path, $basePath);

    return self::DOMAIN_PLACEHOLDER . $path . '#';
}

归结为 \Shopware\Storefront\Framework\Routing\Router::generate

作为一种方法,我建议深入研究这些功能。他们直接访问当前请求和上下文。由于依赖注入,您可以使用目标上下文和包含来自目标通道的正确基础 URL 的人工请求自己创建这些实例。

类似于语言切换器的方法(在 POST 之后重定向)

上面的方法可能比较复杂,所以看看语言切换器的作用:

  • 它只包括语言 ID
  • 关于 \Shopware\Storefront\Controller\ContextController::switchLanguage
  • 的选择帖子
  • 哪个重定向

请求的示例负载:

languageId: 2fbb5fe2e29a4d70aa5854ce7ce3ff0b
redirectTo: frontend.navigation.page
redirectParameters[navigationId]: a11f6b46948c47a7b2c2ac874704fff6

我认为您可以为您的渠道切换器扩展该脚本并将销售渠道 ID 添加到请求中,

然后您可以重用/复制甚至装饰 switchLanguage 控制器。您只需要传入目标销售渠道的正确上下文,它就会重定向到正确的 URL.