我是Magento的新手,在探索系統時,我發現其中一個尷尬之處是將生成的(X)HTML頁面中的給定元素綁定到創建它的塊的名稱。我知道系統 - >配置 - >模板路徑提示。但是,它非常醜陋,有時會改變頁面上元素的佈局,並且不會顯示所有塊(我認爲它只包含模板塊)。Magento - 找到對應於一段HTML的代碼塊
我試過的方法是修改Mage_Core_Block_Abstract中的toHtml()
方法,在內容前後添加空元素,例如。
<blockStart xmlns="http://some/url" name="the_block_name"/>
<!-- the block's contents -->
<blockEnd/>
(可能有辦法做到這一點,而無需修改核心文件,但我不介意這種方法現在,因爲它只是我自己用的。任何想法表示歡迎,雖然)。
這些元素爲我提供足夠的文檔信息,以便在瀏覽器端使用jQuery的.nextUntil()
函數將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,並且這確實允許我的機制成功工作。然而,它有一些嚴重的缺陷:
- 我不得不禁用加載項,特別是商業Bug,不產生有效的XHTML。 Commerce Bug的丟失是非常糟糕的,因爲我真的想要在加載項運行時訪問其頁面和打包XML查看功能。
- Magento中包含的大部分JavaScript都使用document.write(),它不能與XHTML一起使用,所以我得到了javascript異常,並且可能有些功能不起作用。
有沒有人知道我的方法對這些問題的任何解決方案,或知道任何更簡單的方法將輸出中的HTML元素鏈接到產生它們的Magento塊?
我一直在努力以「正確」的方式來做這個事情多年,而且還沒有拿出任何東西堅實,所以我沒有任何建議。也就是說,我討厭Commerce Bug阻止你獲得解決方案的想法,所以我最終修復了擴展中的各種XHTML驗證錯誤。如果您重新下載1.5.3版本(使用原始的電子郵件鏈接),驗證錯誤應該消失。電子郵件支持,如果你碰到任何。 http://www.pulsestorm.net/blog/2012/10/4/commerce-bug-153-maintenance-release.html –
艾倫風暴,你是一個傳奇:-)謝謝你和博客文章,書和商業錯誤,所有這些都有很大的幫助。在CB工作的同時,爲了避免塊輸出不是元素集合的情況下進行一些簡單的調整,我認爲我的方法可能是可以接受的。不足以打包作爲擴展,但足以值得在一次性的magento實例上進行操作,以幫助學習該系統。如果是這樣,我可能會把博客文章放在一起。 – Tom