我是 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 的加载项,尤其是 Commerce Bug。Commerce Bug 的丢失非常糟糕,因为我真的希望在我的加载项运行时访问它的页面并打包 XML 查看功能。
- Magento 中包含的大部分 javascript 都使用了 document.write(),它不适用于 XHTML,因此我得到了 javascript 异常,并且可能某些功能不起作用。
是否有人知道我的方法对这些问题的任何解决方案,或者知道将输出中的 HTML 元素链接到生成它们的 Magento 块的任何更简单的方法?