Próbuję uzyskać rewrite product url
z load product
niestandardowego modułu. Otrzymuję adres URL w http://localhost/m2/catalog/product/view/id/1401/category/23/
formacie.
Ale ja chcę http://localhost/m2/juno-jacket.html
Oto kod
w konstruktorze
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Funkcja niestandardowa
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
zwróć adres URL jak http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
zed Czarnobrody
źródło
źródło
getProductUrl()
ma zwrócić przepisany adres URL, jeśli wpis istnieje wurl_rewrite
. Czy ręcznie usunąłeś rekordy z tej tabeli?Odpowiedzi:
Oto metoda, której użyłem, aby uzyskać adres URL produktu.
To zdecydowanie nie jest optymalne, ponieważ muszę załadować cały produkt, aby uzyskać tak bardzo zły pod względem wydajności.
Najpierw musisz wstrzyknąć a
Magento\Catalog\Model\ProductRepository
do swojego konstruktora:Następnie ładujesz produkt na podstawie identyfikatora produktu:
Wreszcie możesz pobrać model adresu URL w celu odzyskania przepisanego adresu URL:
źródło
To może tak naprawdę nie odpowiedzieć na pytanie, ale są szanse, że jeśli brakuje przepisania adresu URL, możesz wyciągnąć swój produkt z kolekcji produktów. Dodanie informacji o przepisywaniu adresu URL nie jest automatyczne, jak widać w
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.Sposób, w jaki udało mi się wymusić dodanie przepisywania adresów URL, polega na utworzeniu wtyczki w
create()
metodzie\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. I gdy tylko Twój kod (lub główny kod Magento) użyje tej fabryki do zainicjowania kolekcji produktów (i powinno to być zgodne z najlepszymi praktykami), wtyczka ta wymusza\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
totrue
.Następnie przepisywanie adresów URL produktów jest z powodzeniem dodawane do produktów bez potrzeby zapętlania ich i ponownego ładowania. To naprawia w ten sposób wadę perf, o której mówił @Raphael.
Oto definicja XML wtyczki (w twoim
di.xml
pliku):I kod wtyczki:
źródło
Wyeksportuj swoje produkty do pliku csv
z pliku csv w programie Excel użyj tej formuły dla kolumny url_key
gdzie „P103” to kolumna url_key
źródło