Приготовься к странному. Поэтому я настраиваю основную навигацию по каталогу, чтобы создать поведение пользовательского интерфейса с полным состоянием, которое обрабатывает несколько моделей взаимодействия (меню, выпадающие списки, модалы и т. Д.) На разных устройствах. Как ты.
Это означает переопределение этого класса / метода:
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 (aka 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
событие, что-то еще может использовать, чтобы взломать разметку из-за пределов. Ничего.Какая. Является. Случается. Вот.
Ответ
Объясните все это бэкэнд-разработчикам. Все действуют в замешательстве. До того как...