Приготуйся до дивного. Тож я налаштовую основні навігації по каталогу, щоб створити повний стан поведінки інтерфейсу користувача, який обробляє декілька моделей взаємодії (меню, спадні місця, модалі тощо) на різних пристроях. Як і ти.
Це означає переосмислення цього класу / методу:
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
атрибута. Ось де відбувається магія JS. Будь-яке клацання на елементах із цим атрибутом оновлює стан інтерфейсу користувача. Ви здогадалися, li.nav-X
клас (який додає Magento) виконує роль мого гака, щоб прив’язати стан інтерфейсу до активованого елемента.
Все добре, правда? Увімкніть кеш-пам'ять EE. Все добре? Неправильно.
Якщо сторінка, яку ви переглядаєте, знаходиться в ієрархії каталогів Bazinga (ака nav-2
), то раптом ви побачите це:
data-ui-action="nav-2 active"
Хто додав бридкий active
рядок? Фантом - це хто.
А тепер стан вашого інтерфейсу виходить з ладу, оскільки значення атрибуту даних вже не відповідає <li>
класу. Вишукайте фантома.
Полювання
По-перше, ви перевіряєте, що в кеш-пам'яті EE змінна,
$child->getPositionClass()
вихідnav-2
якої насправді не додає інших (імовірно) значень класу, доданих. Це не.Ви перевіряєте, що один із багатьох сценаріїв декоративної програми JS Magento не виконується у навігаційному списку. Це не.
Можливо, це насправді якась дивна річ
/js/varien/menu.js
. Але ви вже виключили ті основні сценарії, як завжди.Можливо, це якийсь божевільний вбудований JS, який ви ніколи не знаєте, як відображається модуль з класу PHP. Шукайте джерело сторінки
active
в<script>
тегах. Ви нічого не знайдете.Можливо, це якийсь інший божевільний JS Magento, але завантажується зовні. Ви відключаєте JS у браузері, але фантом живе.
Ви повертаєтесь до свого
Topmenu.php
класу та вилучаєте атрибут даних. Проблема припиняється. Якого біса.Вам цікаво, чи інший атрибут того ж елемента не належним чином закритий цитатами (ей, багато доданих класів відбувається там). Так ви поміняєте порядок атрибутів і видаляєте їх у різних комбінаціях. Без кісток. Якщо атрибут даних присутній, то і фантом.
Вам цікаво, що, якщо це не цей клас PHP робить діло? Існує відправлена
page_block_html_topmenu_gethtml_after
подія, якусь інша може використовувати для злому розмітки з-за меж. Нічого.Що. Є. Відбувається. Ось
Відповідь
Поясніть все це на задніх дисках. Усі діють розгублено. Поки ...