2012-12-06 40 views
0

我需要開發一個magento擴展,它向一些特定頁面(如產品視圖頁面)添加了一些內容。更具體地說,在產品頁面上,需要添加按鈕/鏈接以將產品添加到第三方心願單網站。如何開發修改現有頁面的magento擴展?

現在,我做了一些研究,它不是完全清楚,最好的方法是什麼:

  1. 使用事件/觀察員攔截「core_block_abstract_to_html_after」事件,如果需要
  2. 使用有增加我的HTML app/design/frontend/base/default/layout /中的local.xml使用'reference'或'update'標籤將我的塊添加到正確的頁面上。但是,我可以將這個local.xml打包到我的擴展中嗎?如果是這樣,它是否可能不會覆蓋用戶自己的local.xml。
  3. 使用Magento Widgets?它看起來像小部件需要手動添加到管理CMS面板中的頁面,而在管理配置中使用交換機來禁用或啓用額外內容。

理想情況下,擴展的用戶需要進行最小配置(或XML編輯),並且擴展必須與現有佈局或用戶所做的修改兼容。

回答

7

這裏沒有單一的答案,就像任何與軟件相關的問題都是一個什麼對你,你的團隊和你的用戶最有效的問題,但是這裏有一些一般的經驗法則。

CMS小工具用於內容管理。當您想要創建一個簡單的用戶界面時,您可以創建一個小部件,其中商店所有者可以創建類型化的內容,然後將其插入到頁面中。分發需要修改頁面的擴展或創建開/關功能不是一個好的選擇。理想的使用案例是Magento解決方案提供商創建特定的小部件和小部件工作流,並且商店所有者內容人員在管理網站內容的同時更新小部件並將其添加到頁面。

local.xml文件用於佈局更新本地到這個特定的商店/主題,並且需要很少的programatic邏輯。您特別提到的將local.xml添加到app/design/frontend/base/default/layout對於您分發的擴展程序來說是一個特別糟糕的選擇,因爲一旦用戶將其自己的local.xml文件添加到主題中,用戶就會失去它。 local.xml的理想用例是爲店主(即與該特定Magento安裝有長期關係)的開發人員,他們需要構建新頁面或非管理內容/交互模塊。第三方擴展不應該添加任何內容到local.xml

官方的祝福方式分發修改現有頁面將

  1. 擴展創建一個模塊
  2. 使用該模塊添加一個佈局XML更新文件(見文件如核心模塊中的catalog.xml
  3. 使用佈局更新XML文件以進行更改

這使您在功能上與local.xml相同,但保持您的代碼與本地用戶的系統代碼分離。如果您可以僅使用佈局更新xml文件(block,reference,action,ifconfig等)的功能來添加塊並實現您的功能,那麼這是一個不錯的選擇。

最後,使用core_block_abstract_to_html_after觀察者。這將允許您使用純PHP添加塊。一些PHP開發人員(包括我自己)更喜歡使用此方法,因爲它比使用佈局更新xml文件更具編程透明性。使用這種方法的缺點是,如果你試圖抓住一個參考塊

$block = Mage::getSingleton('core/layout')->getBlock('some_block'); 
$block->setSomeMethod('foo'); 

some_block不存在,你會得到你致命PHP的錯誤調用非對象的方法。這意味着您的觀察家最終有很多像這樣的代碼

$block = Mage::getSingleton('core/layout')->getBlock('some_block'); 
if($block) 
{ 
    $block->setSomeMethod('foo'); 
} 

對使用​​佈局XML更新文件的好處是這些類型的錯誤在生產存儲失敗默默(雖然它同樣沉默的失敗那是發瘋當發展一個功能)

希望有幫助,祝你好運!如果有疑問,請使用讓您完成工作的技巧 - 以後可以隨時重新分析。

+0

謝謝,這實際上幫助了很多(連同你的教程)! – sgdesmet

相關問題