私はMagentoを初めて使用します。システムを探索するときに気まずいことのひとつは、生成された(X)HTMLページの特定の要素をそれを作成したブロックの名前に結び付けることです。[システム]->[構成]->[テンプレートパスのヒント]を知っています。ただし、これは非常に醜く、ページ上の要素のレイアウトを変更することがあり、すべてのブロックが表示されるわけではありません(テンプレートブロックのみをカバーしていると思います)。
私が試したアプローチはtoHtml()
、Mage_Core_Block_Abstractのメソッドを変更して、コンテンツの前後に空の要素を追加することです。
<blockStart xmlns="http://some/url" name="the_block_name"/>
<!-- the block's contents -->
<blockEnd/>
(コアファイルを変更せずにこれを行う方法があるかもしれませんが、これは私自身の使用のためだけなので、今のところこのアプローチは気にしません。ただし、どんなアイデアでも歓迎します。)
.nextUntil()
これらの要素は、ブラウザ側でjQueryの関数を使用してdata-magento-blockname
、blockStart要素とblockEnd要素の間の要素に属性を追加するのに十分な情報をドキュメントに提供します。次に、これらの属性を使用して、ポインターの下のコンテンツへの完全なブロック名「パス」を含むツールチップをいつでも表示できます。
このアプローチの問題は、Magentoが厳密なDOCTYPEを使用してXHTMLを生成するにもかかわらず、Content-Typeを「text / html」に設定するようにハードコーディングされていることです(app/code/core/Mage/Core/Model/App.php
1246行目を参照)。これは、XMLがブラウザによってHTMLの「タグスープ」として解釈され、奇妙なことが起こることを意味します。私のタグの多くは、完全に消えたり、間違った場所に表示されたり、すぐに閉じられなかったりして、他のコンテンツが含まれています。また、ドキュメント内のすべてのHTML要素がDOMに表示されるわけではありません。
App.phpを変更してContent-Typeをapplication/xhtml + xmlに変更しようとしましたが、これによりメカニズムが正常に機能します。ただし、いくつかの重大な欠点があります。
- 有効なXHTMLを生成しないアドイン、特にCommerceBugを無効にする必要がありました。Commerce Bugの喪失は、アドインの動作中にそのページとパッケージのXML表示機能に本当にアクセスしたいので、かなりひどいものです。
- Magentoに含まれているjavascriptの多くはdocument.write()を利用していますが、これはXHTMLでは機能しないため、javascriptの例外が発生し、おそらく一部の機能が機能しません。
私のアプローチでこれらの問題の解決策を知っている人はいますか、または出力内のHTML要素をそれらを生成するMagentoブロックにリンクする簡単な方法を知っていますか?