Tuhaf birine hazır olun. Bu yüzden, aygıtlar arasında birden çok etkileşim modelini (menüler, açılır listeler, modüller, vb.) Ele alan durumla dolu bir kullanıcı arayüzü davranışı oluşturmak için birincil katalog gezinmesini özelleştiriyorum. Senin yaptığın gibi.
Bu, bu sınıfı / yöntemi geçersiz kılmak anlamına gelir:
app/code/core/Mage/Page/Block/Html/Topmenu.php :: _getHtml()
Bunun gibi HTML çıktısı üretmek için (biraz basitleştirilmiş):
<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>
Şimdi, bu data-ui-action
özellik dışında oldukça sıkıcı / standarttır . JS büyüsü burada gerçekleşir. Bu özelliğe sahip öğelere yapılan tüm tıklamalar UI durumunu günceller. Bunu tahmin ettiniz, li.nav-X
(Magento'nun eklediği) sınıf, UI durumunu etkinleştirilmiş öğeye bağlamak için kancam gibi davranıyor.
Her şey yolunda, değil mi? EE önbelleğini açın. İyi değil mi? Yanlış.
Görüntülediğiniz sayfa Bazinga (aka nav-2
) katalog hiyerarşisindeyse, birdenbire bunu görürsünüz:
data-ui-action="nav-2 active"
Kötü active
ipi kim ekledi ? Hayalet kimdir.
Artık veri özelliğinin değeri <li>
artık sınıfla eşleşmediğinden, kullanıcı arayüzü durumunuz başarısız oluyor . Hayaleti avla.
Av
İlk olarak, EE önbelleği altında
$child->getPositionClass()
çıktı değişkenininnav-2
aslında başka (muhtemelen) sınıf değerlerinin eklenmediğini kontrol edersiniz . O değil.Magento'nun birçok dekoratör JS komut dosyasından birinin gezinme listesinde yürütülmediğini kontrol edersiniz. Değil.
Belki de aslında tuhaf bir şey
/js/varien/menu.js
. Ama bu temel komut dosyalarını her zaman yaptığınız gibi zaten hariç tuttunuz.Belki de bir modül PHP sınıfından render asla bilemezsiniz bazı deli satır içi JS. Sayfa kaynağında etiketler
active
içinde arama yapın<script>
. Hiçbir şey bulamazsın.Belki JS Magento'nun gerektirdiği diğer çılgınca ama dışarıdan yükler. Tarayıcıda JS'yi devre dışı bıraktınız, ancak fantom yaşıyor.
Topmenu.php
Sınıfınıza geri dönersiniz ve veri özniteliğini kaldırırsınız. Sorun duruyor. Ne oluyor be.Aynı öğedeki başka bir özniteliğin uygun şekilde alıntı yapılıp kapanmadığını merak ediyorsunuz (hey, orada çok sayıda sınıf ekleniyor). Böylece özniteliklerin sırasını değiştirir ve bunları çeşitli kombinasyonlarda kaldırırsınız. Nafile. Veri özniteliği varsa, hayalet de öyledir.
Acaba bu PHP sınıfı senet yapmıyorsa?
page_block_html_topmenu_gethtml_after
İşaretlemeyi aşmak için başka bir şeyin kullanabileceği gönderilmiş bir olay var. Hiçbir şey değil.Ne. Dır-dir. Olay. Buraya.
Cevap
Tüm bunları arka uç geliştiricilere açıklayın. Herkes şaşkın davranır. A kadar...