Saya mencoba untuk mendapatkan rewrite product url
dari load product
modul khusus. Saya mendapatkan url dalam http://localhost/m2/catalog/product/view/id/1401/category/23/
format.
Tapi aku ingin http://localhost/m2/juno-jacket.html
Ini kodenya
dalam konstruktor
public function __construct(
\Magento\Catalog\Helper\Product $catalogProductHelper,
) {
$this->catalogProductHelper = $catalogProductHelper;
}
Fungsi kustom
public function abc(){
$product_id = '123';
return $this->catalogProductHelper->getProductUrl($product_id);
}
abc() method
kembalikan url seperti http://localhost/m2/catalog/product/view/id/1401/category/23/
magento2
product
url
url-rewrite
magento-2.0
zed Blackbeard
sumber
sumber
getProductUrl()
seharusnya mengembalikan URL yang ditulis ulang jika entri tersebut ada diurl_rewrite
. Apakah Anda menghapus catatan dari tabel ini secara manual?Jawaban:
Berikut adalah metode yang saya gunakan untuk mendapatkan url produk.
Ini jelas tidak optimal karena saya harus memuat seluruh produk untuk mendapatkannya sehingga sangat buruk dalam hal kinerja.
Pertama, Anda perlu menyuntikkan
Magento\Catalog\Model\ProductRepository
di konstruktor Anda:Kemudian Anda memuat produk berdasarkan id produk:
Akhirnya Anda bisa mendapatkan model URL untuk mengambil URL yang ditulis ulang:
sumber
Ini mungkin tidak benar-benar menjawab pertanyaan tetapi kemungkinannya adalah, jika Anda melewatkan penulisan ulang URL, Anda mungkin mengeluarkan produk dari koleksi produk. Dan menambahkan info penulisan ulang URL tidak otomatis seperti yang Anda lihat
\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
.Cara saya berhasil memaksa penambahan penulisan ulang URL adalah dengan membuat plugin pada
create()
metode\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
. Dan segera setelah kode Anda (atau kode inti Magento) menggunakan pabrik ini untuk menginstalasi koleksi produk (dan itu harus sebagai praktik terbaik), plugin ini memaksa\Magento\Catalog\Model\ResourceModel\Product\Collection::$_addUrlRewrite
untuktrue
.Kemudian, penulisan ulang URL produk berhasil ditambahkan ke produk tanpa perlu mengulanginya dan memuatnya kembali. Dengan demikian memperbaiki kekurangan perf yang dibicarakan @Raphael.
Berikut adalah definisi XML plugin (dalam
di.xml
file Anda ):Dan kode plugin:
sumber
Ekspor produk Anda ke file csv
dari file csv di Excel gunakan rumus ini untuk kolom url_key
di mana "P103" adalah kolom url_key
sumber