Apa cara paling efisien untuk mendapatkan url produk hanya dengan diberikan ID? Di beberapa tempat dalam kode kita, kita memiliki hal-hal seperti Mage::getModel('catalog/product')->load($id)->getProductUrl()
untuk mendapatkan URL produk, mengingat jumlah peristiwa dll yang terkait dengan produk ini tampaknya agak boros, apakah ada metode yang lebih sederhana? Kemampuan untuk juga menentukan id kategori akan menyenangkan.
Selain itu, adakah metode yang efisien untuk melakukan hal yang sama untuk satu atribut untuk produk seperti nama?
product
magento-1
url
performance
best-practice
Peter O'Callaghan
sumber
sumber
Jawaban:
Menarik untuk mengetahui apakah kami bisa mendapatkan URL produk tanpa memuat seluruh produk. Maaf untuk menjawab pertanyaan tambahan Anda dan bukan pertanyaan utama, karena saya juga tidak yakin apakah kami bisa mendapatkannya :)
Untuk mendapatkan atribut tunggal tanpa memuat seluruh produk, Anda dapat menggunakan
getAttributeRawValue()
jika Anda menggunakan Magento CE versi 1.6+Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Sesuai komentar @ philwinkle di bawah ini, berikut adalah kode yang lebih dioptimalkan:
UPDATE: Dapatkan URL produk dengan ID tanpa memuat seluruh produk:
sumber
getResourceSingleton
sebagai gantinya. $ storeId tidak harus berupa id, itu bisa menjadiMage_Core_Model_Store
objek juga, jadi Anda bisa menggunakanMage::app()->getStore()
inline untuk mempercepat.url_key
ini mungkin tidak berfungsi karena magento akan membuat url menulis ulang yang berbeda dari url_keySaya pikir akan bermanfaat untuk melakukan ini melalui koleksi. Jika Anda tidak memerlukan informasi produk lengkap maka Anda dapat memuatnya melalui koleksi dan hanya memuat informasi yang Anda butuhkan. Kode tersebut adalah sebagai berikut.
Catatan:
addUrlRewrite
agar Anda bisa mendapatkan url produk nanti, ini juga dapat mengambil id kategori sebagai parameter, tanpa ini url tidak akan berisi kategori.Anda masih akhirnya memanggil
getProductUrl()
yang akhirnya menggunakanMage_Catalog_Model_Product_Url
, tetapi ini hanya membutuhkan id, request_path dan kunci url sehingga harus berfungsi tanpa produk lengkap.sumber
Saya kira cara paling efisien untuk mendapatkan produk ditulis ulang URL (tanpa memuat produk) adalah dengan melihat langsung pada penulisan ulang URL talbe.
Untuk mendapatkan jalur kategori lengkap, gunakan
Sunting: diuji untuk "url_key", untuk atribut lainnya
getAttributeRawValue
harus sesuai.getRequestPathByIdPath
getAttributeRawValue
load(productId)
sumber
Saya menemukan pertanyaan ini, bertanya-tanya sama. Dan kalau-kalau ada orang lain yang membutuhkan ini kapan-kapan, saya akan posting temuan saya sendiri di sini.
Saya menemukan dua metode untuk mendapatkan URL produk tanpa memuat produk lengkap. Karena saya bekerja pada server yang lambat, saya perlu menemukan metode pemuatan tercepat.
Metode pertama:
Dapatkan pertama adalah koleksi produk berdasarkan ID produk:
Metode kedua:
Metode kedua, menggunakan metode Kalpesh Metha, akan menjadi kode ini:
Untuk metode ini, Anda dapat menggunakan
'url_key'
atau'url_path'
. Saya belum menemukan perbedaannya.Perbedaan antara metode:
Metode pertama membutuhkan waktu sedikit lebih banyak (sekitar 15% waktu tambahan). Namun metode kedua, hanya mengembalikan bagian akhir dari URL. Ini berarti bahwa jika toko menggunakan kategori dalam URL, itu tidak akan berfungsi, karena bagian itu tidak ditampilkan. Ini adalah kasus di toko yang sedang saya kerjakan.
sumber