Hari ini saya telah mengetuk opsi navigasi berlapis yang tidak didasarkan pada atribut. Ini untuk peringkat sehingga ujung depan dapat menunjukkan bintang mengkilap yang bagus.
Untuk melakukan ini saya punya:
- Membuat modul
Tulis ulang catalog_block_layer_view
<blocks> <catalog> <rewrite> <layer_view>Bob_Catalog_Block_Layer_View</layer_view> </rewrite> </catalog> </blocks>
Membuat kelas bernama Bob_Catalog_Block_Layer_View yang meluas Mage_Catalog_Block_Layer_View
- Dibuat _initBlocks (), getFilters () dan _prepareLayout () untuk mengganti metode kelas induk. Ini semua memanggil kelas induk di beberapa titik dan kemudian menambahkan atau menambahkan data tambahan ke apa yang dikembalikan.
- Buat blok filter Bob_Catalog_Block_Layer_Filter_Rating yang meluas Mage_Catalog_Block_Layer_Filter_Abstrak dengan konstruktor yang menetapkan filterModelName dan memanggil induknya dan kemudian menetapkan templat kustom seperti yang terlihat Mage_Catalog_Block_Layer_Filter_Abstrak memiliki nama templat yang dibuat di hardcoded pada konstruksinya.
- Buat model Bob_Catalog_Model_Layer_Filter_Rating yang meluas Mage_Catalog_Model_Layer_Filter_Abstrak dan menerapkan berlaku (), getName (), _getItemsData ().
Ini semua berfungsi dengan baik. Bintang-bintang mengilap bagus ditampilkan di nav berlapis.
Saya punya firasat bahwa saya kehilangan sesuatu karena ketika datang ke template keadaan lapisan saya harus meletakkan kondisional di sana untuk mengambil filter peringkat kustom dan mengubah tata letak. Juga beberapa hal yang perlu saya lakukan (mengklon koleksi produk sehingga acara beban tidak mengacaukan jumlah koleksi pada pagination) membuat saya merasa seperti saya telah berenang ke atas bukit.
Jadi pertanyaannya adalah apakah ada di antara Anda yang punya saran lebih baik (atau mungkin posting blog mengedipkan mata ) tentang cara membuat filter navigasi berlapis yang didukung atribut non-atribut?
Terima kasih sudah membaca,
Si
sumber
Jawaban:
Ada cara lain untuk melakukannya, Anda dapat menambahkan atribut normal ke produk Anda yang akan menjadi peringkat. Kemudian gunakan pengamat (saya tidak tahu bagaimana peringkat ini dibentuk) untuk memperbarui atribut produk. Atau, jika pengamat ada pilihan, mungkin menggunakan cronjob yang memperbarui atribut itu untuk setiap produk setiap x menit tergantung pada seberapa berat skripnya.
Dengan cara ini tidak ada penulisan ulang dan pengubahan Magento yang terlibat, semua modul navigasi akan tetap berfungsi dan lebih mudah dirawat.
Tentu saja pertanyaannya adalah, apakah ini pilihan untuk Anda? Dari mana datangnya peringkat?
EDIT Anda harus memberi style pada bintang menggunakan javascript atau memeriksa nama atribut dalam template.
sumber
Saya menggali ke dalam kode dan tidak menemukan acara. Tanpa menambahkan atribut tambahan tidak ada yang bisa dilakukan tanpa
<rewrite>
Anda harus menambahkan blok Anda
\Mage_Catalog_Block_Layer_View::_prepareLayout()
sebelumapply()
(jika tidak bisa Anda gunakancore_block_abstract_prepare_layout_after
.Dan Anda perlu menambahkannya
\Mage_Catalog_Block_Layer_View::getFilters()
dan tidak ada acara juga.sumber
catalog/layer_filter_category
,catalog/layer_filter_attribute
dancatalog_resource/layer_filter_attribute
untuk menampilkan opsi setiap saat tanpa menggunakanstate.phtml
saat ini tidak ada cara untuk menghapus filter: - /