如何获取 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.
我需要在 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.