ম্যাজেন্টোর ইই ক্যাশে স্ট্রাইক করে ফ্যান্টম নেভিগেশন ডেকরেটারের কৌতূহলবহুল কেস


12

একটি অদ্ভুত জন্য প্রস্তুত হন। সুতরাং আমি একটি স্টেট-পূর্ণ 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>আর শ্রেণীর সাথে মেলে না। ফ্যান্টম হান্ট।

শিকার

  1. প্রথমত, আপনি পরীক্ষা করতে পারেন যে EE ক্যাশের অধীনে চলক $child->getPositionClass()যা আউটপুটগুলিতে nav-2আসলে অন্যান্য (সম্ভবত) শ্রেণীর মান সংযুক্ত থাকে না। এটা না.

  2. আপনি পরীক্ষা করে দেখুন যে ম্যাজেন্টোর অনেকগুলি ডেকরেটার জেএস স্ক্রিপ্ট ন্যাভ তালিকায় কার্যকর হচ্ছে না। এটা না।

  3. সম্ভবত এটি আসলে কিছু অদ্ভুত জিনিস /js/varien/menu.js। আপনি ইতিমধ্যে সবসময় করা হিসাবে আপনি ইতিমধ্যে সেই মূল স্ক্রিপ্টগুলি বাদ দিয়েছেন।

  4. হতে পারে এটি কিছু ক্রেজি ইনলাইন জেএস, আপনি কখনই জানেন না যে কোনও মডিউল পিএইচপি ক্লাসের বাইরে রেন্ডার করে। ট্যাগের activeমধ্যে পৃষ্ঠার উত্স অনুসন্ধান করুন <script>। আপনি কিছুই খুঁজে।

  5. হতে পারে এটি অন্য কিছু ক্রেজি জেএস ম্যাজেন্টোর প্রয়োজন তবে বহিরাগতভাবে লোড। আপনি ব্রাউজারে জেএস নিষ্ক্রিয় করেছেন, কিন্তু ভুত বাঁচে।

  6. আপনি আপনার Topmenu.phpক্লাসে ফিরে যান এবং ডেটা অ্যাট্রিবিউট সরিয়ে ফেলুন। সমস্যা থেমে যায়। কি খারাপ অবস্থা.

  7. আপনি ভাবছেন যে একই উপাদানটির অন্য কোনও বৈশিষ্ট্যটি সঠিকভাবে উদ্ধৃতি-বন্ধ না থাকলে (আরে, প্রচুর ক্লাস সংযোজন সেখানে ঘটে) happens সুতরাং আপনি বৈশিষ্ট্যের ক্রমটি অদলবদল করে এবং বিভিন্ন সংমিশ্রণে সেগুলি সরিয়ে দিন। কোন পাশা. যদি ডেটা অ্যাট্রিবিউট উপস্থিত থাকে তবে সেই ভুতটিও।

  8. আপনি অবাক হন যদি এই পিএইচপি ক্লাসটি ডিলটি না করে? একটা প্রেষিত এর page_block_html_topmenu_gethtml_afterঅন্য ঘটনা কিছু বাইরে থেকে মার্কআপ উপর হ্যাক করার জন্য ব্যবহার করতে পারেন। কিছুই নেই।

  9. কি. হয়। ঘটছে। এখানে.

উত্তর

ব্যাকএন্ড ডেভসগুলিতে এটি সমস্ত ব্যাখ্যা করুন। সবাই বিভ্রান্তির সাথে কাজ করে। যতক্ষণ না ...

উত্তর:


10

কারও ফাটল খোলা:

app/code/core/Enterprise/PageCache/Model/Container/Catalognavigation.php
Method: saveCache()
Line 107

আপনি একটি বাজে সামান্য নিয়মিত প্রকাশ দেখতে পাবেন:

if (preg_match('/(?<=\s|^)nav-.+?(?=\s|$)/', $classValue, $matches)) {
    $categoryUniqueClasses .= ($categoryUniqueClasses ? ' ' : '') . $matches[0];
}

যার জন্য কিছু শয়তানি মেলা nav-মধ্যেই <li>। ঠিক তাই মনে আছে:

<li class="nav-1">
    <a data-ui-action="nav-1" href="#">Bazzow</a>
    <div class="menu"> ... </div>
</li>

ম্যাজেন্টো কেবলমাত্র উপাদানগুলিতে nav-স্ট্রিং সন্ধান করার জন্য প্রত্যাশা করছে <li>তবে আপনার ডেটা অ্যাট্রিবিউটের মানটি মিলছে এবং এতে হ্যাক হচ্ছে। চাই না.

সুতরাং একটি পৃথক শ্রেণি এবং ডেটা অ্যাট্রিবিউট ব্যবহার করুন i-have-a-child-

ভূত

একজন সত্যিকারের মানুষ নিজের ভাগ্য তৈরি করেন, বিলি জেন।


1
"দুর্দান্ত" সমস্যা এবং ব্যাখ্যা!
আন্না ভলক্ল

হাহা বাহ এটাই আসলে বেশ পাগল ... পূর্ণ পৃষ্ঠা ক্যাশে মডিউলের একটি মডেল ... upvated
এরফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.