我正在Magento 2中开发我的网站,在更改类别URL后,我需要为产品重新生成URL。
现有产品的网址没有变化。
例如:
类别网址&#39>: 新网址: http://test.com/jewellery-collections/gold-jewellery/gold-rings 旧网址: http://test.com/collections/gold/rings
产品网址: http://test.com/collections/gold/rings/midas-bloom
但网址应该是 http://test.com/jewellery-collections/gold-jewellery/gold-ringsmidas-bloom
因此,应根据新类别网址
重新生成产品网址答案 0 :(得分:-1)
一个非常简单的解决方案是使用准备运行的Magento 2模块,它完全可以完成重写索引器的工作。您可以通过代码或命令行调用此重新生成。更好的解决方案是通过您自己的导入器模块中的代码来实现。再生非常简单
foreach($list as $product) {
if($store_id === Store::DEFAULT_STORE_ID)
$product->setStoreId($store_id);
$this->urlPersist->deleteByData([
UrlRewrite::ENTITY_ID => $product->getId(),
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
UrlRewrite::REDIRECT_TYPE => 0,
UrlRewrite::STORE_ID => $store_id
]);
try {
$this->urlPersist->replace(
$this->productUrlRewriteGenerator->generate($product)
);
} catch(\Exception $e) {
$out->writeln('<error>Duplicated url for '. $product->getId() .'</error>');
} }
正如您所看到的,Magento 2为您提供了重新生成url的模型重写\ Magento \ CatalogUrlRewrite \ Model \ ProductUrlRewriteGenerator(productUrlRewriteGenerator),您可以将其注入模型中。这个生成的url重写可以替换为\ Magento \ UrlRewrite \ Model \ UrlPersistInterface(urlPersist)。您可以在导入后为所有产品循环运行,也可以在更改后为每个产品运行。