เตรียมตัวให้พร้อมสำหรับสิ่งแปลก ๆ ดังนั้นฉันจึงปรับแต่งการนำทางแคตตาล็อกหลักเพื่อสร้างพฤติกรรม 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
คลาส (ซึ่งวีโอไอพีเพิ่ม) ทำหน้าที่เป็นตะขอของฉันในการผูกสถานะ UI กับองค์ประกอบที่เปิดใช้งาน
ดีเลยใช่มั้ย เปิดแคช EE ถูกต้องหรือไม่ ไม่ถูกต้อง.
หากหน้าเว็บที่คุณกำลังดูอยู่ในลำดับชั้นของแคตตาล็อกของBazinga (aka nav-2
) ทันใดนั้นคุณจะเห็นสิ่งนี้:
data-ui-action="nav-2 active"
ใครเพิ่มactive
สตริงที่น่ารังเกียจ? แฟนคือใคร
และตอนนี้สถานะ UI ของคุณล้มเหลวเนื่องจากค่าของแอตทริบิวต์ข้อมูลไม่ตรงกับ<li>
คลาสอีกต่อไป ตามล่าปีศาจ
การตามล่า
ก่อนอื่นคุณตรวจสอบว่าภายใต้ EE cache ตัวแปร
$child->getPositionClass()
ที่เอาท์พุทnav-2
ไม่ได้มีค่าต่อท้ายอื่น ๆ (สมมุติ) อื่น ๆ มันไม่ใช่.คุณตรวจสอบว่าหนึ่งในสคริปต์ JS ของมัณฑนากรหลายตัวของ Magento ไม่ได้ทำงานในรายการ nav มันไม่ใช่.
/js/varien/menu.js
บางทีมันอาจจะเป็นจริงบางสิ่งที่แปลกใน แต่คุณได้ยกเว้นสคริปต์หลักเหล่านั้นอย่างที่คุณเคยทำบางที JS แบบอินไลน์บ้า ๆ บอ ๆ ที่คุณไม่มีทางรู้ว่าโมดูลแสดงผลออกมาจากคลาส PHP ค้นหาแหล่งที่มาของหน้า
active
ภายใน<script>
แท็ก คุณไม่พบอะไรเลยบางทีมันอาจเป็นบางสิ่งที่ JS Magento ที่บ้าคลั่ง แต่ต้องการโหลดจากภายนอก คุณปิดการใช้งาน JS ในเบราว์เซอร์ แต่ผียังมีชีวิตอยู่
คุณกลับไปที่
Topmenu.php
ชั้นเรียนของคุณและลบข้อมูลคุณลักษณะ ปัญหาหยุดลง สิ่งที่นรกคุณสงสัยว่าคุณลักษณะอื่นในองค์ประกอบเดียวกันนั้นไม่ได้ปิดการอ้างอย่างถูกต้องหรือไม่ (เฮ้มีการต่อท้ายคลาสจำนวนมากเกิดขึ้นที่นั่น) ดังนั้นคุณจะต้องสลับลำดับของคุณลักษณะและลบออกเป็นชุดต่างๆ ไม่มีลูกเต๋า หากแอตทริบิวต์ data มีอยู่ดังนั้นจึงเป็น phantom
คุณสงสัยไหมว่าถ้าไม่ใช่คลาส PHP ตัวนี้จะทำอย่างไร มี
page_block_html_topmenu_gethtml_after
กิจกรรมที่ถูกจัดส่งอย่างอื่นที่อาจใช้เพื่อแฮ็กอัปมาร์คอัปจากที่อื่น ๆ ไม่มีอะไรอะไร. คือ. สิ่งที่เกิดขึ้น ที่นี่
คำตอบ
อธิบายทุกสิ่งที่ devs แบ็กเอนด์ ทุกคนแสดงความสับสน จนกระทั่ง ...