1
幻影导航装饰器撞击Magento的EE缓存的奇怪情况
准备好一个奇怪的。因此,我正在自定义主要目录导航,以构建一个全状态的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属性之外,这非常无聊/标准。那就是JS魔术发生的地方。对具有该属性的元素的任何单击都会更新UI状态。您猜对了,li.nav-X该类(Magento添加)充当了将UI状态绑定到激活元素的钩子。 一切都好吧?打开EE缓存。好吧?错误。 如果您正在查看的页面在Bazinga(aka nav-2)的目录层次结构内,那么突然您将看到以下内容: data-ui-action="nav-2 active" 谁添加了讨厌的active字符串?幻影是谁。 现在,您的UI状态失败,因为数据属性的值不再与<li>该类匹配。寻找幻影。 狩猎 首先,您检查在EE高速缓存下$child->getPositionClass()输出的变量nav-2实际上没有附加其他(大概)类值。它不是。 您检查了Magento的许多装饰器JS脚本之一是否未在导航列表中执行。不是。 也许这实际上是一件奇怪的事情/js/varien/menu.js。但是您已经像往常一样排除了那些核心脚本。 也许这是一些疯狂的内联JS,您永远不会知道模块会从PHP类中渲染出来。在页面源中搜索标记active内<script>。你什么也没找到。 也许这是其他一些疯狂的JS Magento所需要的,但是从外部加载。您在浏览器中禁用了JS,但是幻影仍然存在。 您回到Topmenu.php班级并删除data属性。问题停止了。我勒个去。 您想知道同一元素上的另一个属性是否未正确用引号引起来(嘿,很多类附加在其中发生)。因此,您交换属性的顺序并以各种组合将其删除。没有骰子。如果存在data属性,则幻像也存在。 您想知道不是该 PHP类在做事吗?有一个已调度的page_block_html_topmenu_gethtml_after事件,其他事件可能会用它来破坏标记。没有。 什么。是的。发生了。这里。 答案 …