이상한 것을 준비하십시오. 따라서 기본 카탈로그 탐색을 사용자 정의하여 장치에서 여러 상호 작용 모델 (메뉴, 드롭 다운, 모달 등)을 처리하는 상태 전체 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 (일명 nav-2
) 의 카탈로그 계층 구조 내에 있으면 갑자기 다음과 같이 표시됩니다.
data-ui-action="nav-2 active"
불쾌한 active
줄을 누가 추가 했습니까? 팬텀은 누구입니다.
데이터 속성의 값이 <li>
더 이상 클래스 와 일치하지 않으므로 UI 상태가 실패합니다 . 팬텀을 사냥하십시오.
사냥
먼저, EE 캐시에서
$child->getPositionClass()
출력에nav-2
실제로 다른 클래스 값이 추가되지 않은 변수를 확인하십시오 . 그렇지 않습니다.Magento의 많은 데코레이터 JS 스크립트 중 하나가 탐색 목록에서 실행되고 있지 않은지 확인하십시오. 그렇지 않습니다.
어쩌면에 실제로 이상한 일이
/js/varien/menu.js
있습니다. 그러나 항상 그렇듯이 핵심 스크립트는 이미 제외했습니다.어쩌면 PHP 클래스에서 모듈이 렌더링되는 것을 결코 알지 못할 미친 인라인 JS 일 수 있습니다. 태그
active
내 에서 페이지 소스를 검색하십시오<script>
. 당신은 아무것도 찾을 수 없습니다.어쩌면 다른 JS Magento가 필요하지만 외부에서로드 할 수 있습니다. 브라우저에서 JS를 비활성화하지만 팬텀은 살아 있습니다.
Topmenu.php
클래스 로 돌아가서 데이터 속성을 제거합니다. 문제가 멈 춥니 다. 도대체동일한 요소의 다른 속성이 제대로 인용 부호로 닫히지 않았는지 궁금합니다 (여기서 클래스 추가가 많이 발생합니다). 따라서 속성 순서를 바꾸고 다양한 조합으로 제거합니다. 주사위가 없습니다. 데이터 속성이 있으면 팬텀도 존재합니다.
이 PHP 클래스가 행동을 하지 않는다면 어떨까요?
page_block_html_topmenu_gethtml_after
다른 곳에서 마크 업을 해킹하는 데 사용할 수 있는 파견 된 이벤트가 있습니다. 아무것도.뭐. 입니다. 사고. 여기.
대답
백엔드 개발자에게 모든 것을 설명하십시오. 모두 혼란스러워합니다. 까지...