Переопределить получение URL-адреса продукта в Magento 2
Я использую Magento 2.3.4 и хочу, чтобы URL-адрес какого-либо продукта отличался от URL-адреса перезаписи, потому что я уже создал пользовательскую веб-страницу для этого продукта:
Например
getProductUrl() => http://baseurl.com/sku.html into getProductUrl() => http://baseurl.com/custom/product/page/id/5
1
1 answers
Есть несколько способов, которыми вы можете это сделать.
Создайте после плагина в методе \Magento\Catalog\Model\Product\Url:getProductUrl
и измените функцию вывода этой функции.
Определить di.xml
местоположение: app/code/{VendorName}/{ModuleName/etc/
и объявите плагин здесь отсюда
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Model\Product\Url">
<plugin disabled="false" name="StackExchange_MagentoTest_Plugin_Magento_Catalog_Model_Product_Url" sortOrder="12" type="StackExchange\MagentoTest\Plugin\Magento\Catalog\Model\Product\Url"/>
</type>
</config>
Определенный класс плагина
Местоположение: app/code/{VendorName}/{ModuleNamePlugin/Magento/Catalog/Model/Product/Url.php
<?php
namespace StackExchange\MagentoTest\Plugin\Magento\Catalog\Model\Product;
class Url
{
private $urlFactory;
privtae $storeManager;
public function __construct(
\Magento\Framework\UrlFactory $urlFactory,
\Magento\Store\Model\StoreManagerInterface $storeManager
){
$this->urlFactory = $urlFactory;
$this->storeManager = $storeManager;
}
public function afterGetProductUrl(
\Magento\Catalog\Model\Product\Url $subject,
$result,
$product,
$routeParams
) {
$storeId = $product->getStoreId();
if (isset($routeParams['_scope'])) {
$storeId = $this->storeManager->getStore($routeParams['_scope'])->getId();
}
if ($storeId != $this->storeManager->getStore()->getId()) {
$routeParams['_scope_to_url'] = true;
}
$routePath = 'custom/product/page/';
$routeParams['id'] = $product->getId();
$url = $this->urlFactory->create()->setScope($storeId);
return $url->getUrl($routePath, $routeParams);
}
}
1
Author: Amit Bera, 2020-08-04 11:22:09