একটি অদ্ভুত জন্য প্রস্তুত হন। সুতরাং আমি একটি স্টেট-পূর্ণ UI আচরণ তৈরির জন্য প্রাথমিক ক্যাটালগ নেভিগেশন কাস্টমাইজ করছি যা ডিভাইস জুড়ে একাধিক ইন্টারঅ্যাকশন মডেল (মেনু, ড্রপডাউন, মডেল, ইত্যাদি) পরিচালনা করে। তোমার পছন্দ মতই করো.
এর অর্থ এই শ্রেণি / পদ্ধতিটিকে ওভাররাইড করা:
app/code/core/Mage/Page/Block/Html/Topmenu.php :: _getHtml()
এইচটিএমএল আউটপুট উত্পাদন করতে (কিছুটা সরলীকৃত):
<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
বৈশিষ্ট্য বাদে বেশ বিরক্তিকর / মানক । সেখানেই জেএস জাদু ঘটে। সেই বৈশিষ্ট্যযুক্ত উপাদানগুলিতে যে কোনও ক্লিকই ইউআই রাষ্ট্র আপডেট করে। আপনি অনুমান করেছেন, li.nav-X
ক্লাসটি (যা ম্যাগেন্টো যুক্ত করে) সক্রিয় উপাদানটির সাথে ইউআই রাষ্ট্রের সাথে আবদ্ধ হওয়ার জন্য আমার হুক হিসাবে কাজ করে।
ঠিক আছে, ঠিক আছে? EE ক্যাশে চালু করুন। ঠিক আছে? ভুল।
আপনি যে পৃষ্ঠাটি দেখছেন সেটি যদি বাজিঙ্গা (ওরফে nav-2
) এর ক্যাটালগ শ্রেণিবিন্যাসের মধ্যে থাকে তবে হঠাৎ আপনি এটি দেখতে পাবেন:
data-ui-action="nav-2 active"
কারা দুষ্টু active
স্ট্রিং যুক্ত করেছে ? ভুতটি কে।
এবং এখন আপনার ইউআই রাষ্ট্র ব্যর্থ হয়েছে, কারণ ডেটা অ্যাট্রিবিউটর মানটি <li>
আর শ্রেণীর সাথে মেলে না। ফ্যান্টম হান্ট।
শিকার
প্রথমত, আপনি পরীক্ষা করতে পারেন যে EE ক্যাশের অধীনে চলক
$child->getPositionClass()
যা আউটপুটগুলিতেnav-2
আসলে অন্যান্য (সম্ভবত) শ্রেণীর মান সংযুক্ত থাকে না। এটা না.আপনি পরীক্ষা করে দেখুন যে ম্যাজেন্টোর অনেকগুলি ডেকরেটার জেএস স্ক্রিপ্ট ন্যাভ তালিকায় কার্যকর হচ্ছে না। এটা না।
সম্ভবত এটি আসলে কিছু অদ্ভুত জিনিস
/js/varien/menu.js
। আপনি ইতিমধ্যে সবসময় করা হিসাবে আপনি ইতিমধ্যে সেই মূল স্ক্রিপ্টগুলি বাদ দিয়েছেন।হতে পারে এটি কিছু ক্রেজি ইনলাইন জেএস, আপনি কখনই জানেন না যে কোনও মডিউল পিএইচপি ক্লাসের বাইরে রেন্ডার করে। ট্যাগের
active
মধ্যে পৃষ্ঠার উত্স অনুসন্ধান করুন<script>
। আপনি কিছুই খুঁজে।হতে পারে এটি অন্য কিছু ক্রেজি জেএস ম্যাজেন্টোর প্রয়োজন তবে বহিরাগতভাবে লোড। আপনি ব্রাউজারে জেএস নিষ্ক্রিয় করেছেন, কিন্তু ভুত বাঁচে।
আপনি আপনার
Topmenu.php
ক্লাসে ফিরে যান এবং ডেটা অ্যাট্রিবিউট সরিয়ে ফেলুন। সমস্যা থেমে যায়। কি খারাপ অবস্থা.আপনি ভাবছেন যে একই উপাদানটির অন্য কোনও বৈশিষ্ট্যটি সঠিকভাবে উদ্ধৃতি-বন্ধ না থাকলে (আরে, প্রচুর ক্লাস সংযোজন সেখানে ঘটে) happens সুতরাং আপনি বৈশিষ্ট্যের ক্রমটি অদলবদল করে এবং বিভিন্ন সংমিশ্রণে সেগুলি সরিয়ে দিন। কোন পাশা. যদি ডেটা অ্যাট্রিবিউট উপস্থিত থাকে তবে সেই ভুতটিও।
আপনি অবাক হন যদি এই পিএইচপি ক্লাসটি ডিলটি না করে? একটা প্রেষিত এর
page_block_html_topmenu_gethtml_after
অন্য ঘটনা কিছু বাইরে থেকে মার্কআপ উপর হ্যাক করার জন্য ব্যবহার করতে পারেন। কিছুই নেই।কি. হয়। ঘটছে। এখানে.
উত্তর
ব্যাকএন্ড ডেভসগুলিতে এটি সমস্ত ব্যাখ্যা করুন। সবাই বিভ্রান্তির সাথে কাজ করে। যতক্ষণ না ...