Bersiaplah untuk yang aneh. Jadi saya menyesuaikan navigasi katalog utama untuk membangun perilaku UI keadaan penuh yang menangani beberapa model interaksi (menu, dropdown, modals, dll) di seluruh perangkat. Seperti yang kamu lakukan.
Itu berarti mengganti kelas / metode ini:
app/code/core/Mage/Page/Block/Html/Topmenu.php :: _getHtml()
Untuk menghasilkan output HTML seperti ini (agak disederhanakan):
<ul class="nav-list">
<li class="nav-1">
<a data-ui-action="nav-1" href="#">Bazzow</a>
<div class="menu"> ... </div>
</li>
<li class="nav-2">
<a data-ui-action="nav-2" href="#">Bazinga</a>
<div class="menu"> ... </div>
</li>
</ul>
Sekarang, ini cukup membosankan / standar kecuali untuk data-ui-action
atributnya. Di situlah keajaiban JS terjadi. Setiap klik pada elemen dengan atribut itu akan memperbarui keadaan UI. Anda dapat menebaknya, li.nav-X
kelas (yang ditambahkan Magento) bertindak sebagai pengait saya untuk mengikat keadaan UI ke elemen yang diaktifkan.
Semua baik-baik saja, kan? Nyalakan cache EE. Baik baik saja Salah.
Jika halaman yang Anda lihat berada dalam hierarki katalog Bazinga (alias nav-2
), maka tiba-tiba Anda akan melihat ini:
data-ui-action="nav-2 active"
Siapa yang menambahkan active
string jahat ? Hantu adalah siapa.
Dan sekarang keadaan UI Anda gagal, karena nilai atribut data tidak cocok dengan <li>
kelas lagi. Memburu hantu.
Perburuan
Pertama, Anda memeriksa bahwa di bawah EE cache variabel
$child->getPositionClass()
yang keluarannyanav-2
tidak benar-benar memiliki nilai kelas lain (mungkin) ditambahkan. Itu tidak.Anda memeriksa bahwa salah satu dari banyak skrip JS dekorator Magento tidak dieksekusi pada daftar nav. Ini bukan.
Mungkin itu sebenarnya beberapa hal aneh
/js/varien/menu.js
. Tetapi Anda sudah mengecualikan script inti seperti yang selalu Anda lakukan.Mungkin itu beberapa JS inline gila yang Anda tidak akan pernah tahu modul merender keluar dari kelas PHP. Cari sumber halaman di
active
dalam<script>
tag. Anda tidak menemukan apa pun.Mungkin ini memerlukan beberapa JS Magento gila lainnya tetapi memuat secara eksternal. Anda menonaktifkan JS di browser, tetapi hantu tetap hidup.
Anda kembali ke
Topmenu.php
kelas Anda dan menghapus atribut data. Masalahnya berhenti. Apa apaan.Anda bertanya-tanya apakah atribut lain pada elemen yang sama tidak benar kutipan-ditutup (hei, banyak penambahan kelas terjadi di sana). Jadi, Anda menukar urutan atribut dan menghapusnya dalam berbagai kombinasi. Tidak ada dadu. Jika atribut data ada, begitu juga hantu.
Anda bertanya-tanya bagaimana jika bukan kelas PHP ini yang melakukan perbuatan itu? Ada
page_block_html_topmenu_gethtml_after
acara yang dikirimkan oleh orang lain untuk meretas markup dari luar. Tidak ada.Apa. Adalah. Kejadian. Sini.
Jawabannya
Jelaskan semua itu kepada para pengembang backend. Semua orang bertindak bingung. Sampai...