एक अजीब के लिए तैयार हो जाओ। इसलिए मैं प्राथमिक कैटलॉग नेविगेशन को कस्टमाइज़ कर रहा हूं ताकि राज्य-पूर्ण UI व्यवहार का निर्माण किया जा सके, जो उपकरणों में कई इंटरैक्शन मॉडल (मेनू, ड्रॉपडाउन, मॉडल आदि) को संभालता है। जैसे आप करते हैं।
इसका मतलब है कि इस वर्ग / विधि को ओवरराइड करना:
app/code/core/Mage/Page/Block/Html/Topmenu.php :: _getHtml()
इस तरह से HTML आउटपुट तैयार करने के लिए (कुछ सरलीकृत):
<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>
अब, यह data-ui-action
विशेषता के अलावा बहुत उबाऊ / मानक है । बस यहीं से जेएस मैजिक होता है। उस विशेषता वाले तत्वों पर कोई भी क्लिक यूआई स्थिति को अपडेट करता है। आपने यह अनुमान लगाया, li.nav-X
वर्ग (जो Magento जोड़ता है) UI को सक्रिय तत्व में बाँधने के लिए मेरे हुक के रूप में कार्य करता है।
सब अच्छा है, है ना? EE कैश चालू करें। सब ठीक है? गलत।
यदि आप जो पृष्ठ देख रहे हैं, वह बेज़िंगा (उर्फ nav-2
) की सूची पदानुक्रम के भीतर है , तो अचानक आपको यह दिखाई देगा:
data-ui-action="nav-2 active"
गंदा active
तार किसने जोड़ा ? प्रेत कौन है।
और अब आपका UI स्थिति विफल हो जाता है, क्योंकि डेटा विशेषता का मान <li>
वर्ग से मेल नहीं खाता है । प्रेत का शिकार करें।
शिकार
सबसे पहले, आप जांचते हैं कि ईई कैश के तहत चर
$child->getPositionClass()
जो आउटपुटnav-2
वास्तव में अन्य (संभवतया) वर्ग मानों में संलग्न नहीं है। ऐसा नहीं होता।आप जाँचते हैं कि मैगेंटो के कई डेकोरेटर जेएस स्क्रिप्ट्स में से एक भी नेवी लिस्ट में नहीं है। यह।
शायद यह वास्तव में कुछ अजीब बात है
/js/varien/menu.js
। लेकिन आपने पहले से ही उन मुख्य लिपियों को बाहर रखा है जैसे आप हमेशा करते हैं।शायद यह कुछ पागल इनलाइन जेएस है जिसे आप कभी नहीं जान पाएंगे कि एक मॉड्यूल PHP क्लास से बाहर निकलता है। के लिए पृष्ठ का स्रोत खोजें
active
भीतर<script>
टैग। आप कुछ नहीं पाते हैं।शायद यह कुछ अन्य पागल जे एस Magento की आवश्यकता है, लेकिन बाहरी रूप से लोड होता है। आप जेएस को ब्राउज़र में अक्षम करते हैं, लेकिन प्रेत रहता है।
आप अपनी
Topmenu.php
कक्षा में वापस जाते हैं और डेटा विशेषता को निकालते हैं। समस्या बंद हो जाती है। क्या बकवास है।आपको आश्चर्य होता है कि एक ही तत्व पर एक अन्य विशेषता ठीक से बोली-बंद नहीं है (अरे, बहुत सारे क्लास अपग्रेडिंग होते हैं)। तो आप विशेषताओं के क्रम को स्वैप करते हैं और उन्हें विभिन्न संयोजन में निकालते हैं। कोई पाँसा नहीं। यदि डेटा विशेषता मौजूद है, तो प्रेत है।
आप क्या यह नहीं कर रहा है, तो आश्चर्य इस कार्य कर पीएचपी वर्ग? एक प्रेषण
page_block_html_topmenu_gethtml_after
घटना है कुछ और मार्कअप से अधिक हैक करने के लिए उपयोग कर सकते हैं। कुछ भी तो नहीं।क्या। है। हो रहा है। यहाँ।
उत्तर
बैकेंड देवों को वह सब समझाएं। हर कोई उलझन में कार्य करता है। जब तक ...