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(別名nav-2)のカタログ階層内にある場合、突然次のように表示されます。 data-ui-action="nav-2 active" 不快なactive文字列を追加したのは誰ですか?幻は誰です。 そして、データ属性の値が<li>クラスと一致しなくなったため、UI状態が失敗します。ファントムを追い詰める。 狩り 最初に、EEキャッシュの下$child->getPositionClass()で、出力nav-2に実際に他の(おそらく)クラス値が追加されていないことを確認します。ありません。 Magentoの多くのデコレータJSスクリプトの1つがnavリストで実行されていないことを確認します。そうではありません。 たぶんそれは実際にはの奇妙なことでしょう/js/varien/menu.js。ただし、いつものように、これらのコアスクリプトは既に除外されています。 たぶん、モジュールがPHPクラスからレンダリングされるとは決して知らない、クレイジーなインラインJSかもしれません。タグactive内でページソースを検索します<script>。何も見つかりません。 たぶん、JS Magentoが必要とするが外部からロードする他のクレイジーなものかもしれません。ブラウザでJSを無効にしますが、ファントムは存続します。 Topmenu.phpクラスに戻り、データ属性を削除します。問題は停止します。なんてこったい。 同じ要素の別の属性が適切に引用符で閉じられていないのではないかと思います(クラスの追加が多く発生します)。そのため、属性の順序を入れ替えて、さまざまな組み合わせで削除します。サイコロなし。データ属性が存在する場合、ファントムも存在します。 この PHPクラスが行動を起こさないとしたらどうでしょうか。page_block_html_topmenu_gethtml_afterマークアップを超えてハックするために他の何かが使用する可能性のあるディスパッチイベントがあります。なし。 何。です ハプニング。ここに。 …