Я пытаюсь получить rewrite product url
из load product
пользовательского модуля. Я получаю URL в http://localhost/m2/catalog/product/view/id/1401/category/23/
формате.
Но я хочу http://localhost/m2/juno-jacket.html
Вот код
в конструкторе
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Пользовательская функция
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
возврат URL как http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
Зед Черная Борода
источник
источник
getProductUrl()
должен вернуть переписанный URL, если запись существует вurl_rewrite
. Вы удалили записи из этой таблицы вручную?Ответы:
Вот метод, который я использовал, чтобы получить URL продукта.
Это определенно не оптимально, так как я должен загрузить весь продукт, чтобы получить его очень плохо с точки зрения производительности.
Сначала вам нужно добавить
Magento\Catalog\Model\ProductRepository
в ваш конструктор:Затем вы загружаете продукт на основе идентификатора продукта:
Наконец, вы можете получить модель URL для получения переписанного URL:
источник
Это может на самом деле не ответить на вопрос, но есть вероятность, что, если вы пропустите перезапись URL, вы можете получить свой продукт из коллекции продуктов. И добавление информации о перезаписи URL не является автоматическим, как вы можете видеть в
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.Мне удалось принудительно добавить перезапись URL-адресов путем создания плагина для
create()
метода\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. И как только ваш код (или основной код Magento) использует эту фабрику для создания экземпляра коллекции продуктов (и это следует из лучших практик), этот плагин заставляет\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
totrue
.Затем URL-адреса продуктов успешно добавляются в продукты без необходимости их зацикливания и перезагрузки. Таким образом, это исправляет недостатки, о которых говорил @Raphael.
Вот определение XML плагина (в вашем
di.xml
файле):И код плагина:
источник
Экспортируйте свои продукты в файл CSV
из файла CSV в Excel используйте эту формулу для столбца url_key
где «P103» - столбец url_key
источник