如何开发修改现有页面的magento扩展?

sgd*_*met 0 magento

我需要开发一个magento扩展,它将一些内容添加到特定页面,例如产品视图页面.更具体地说,在产品页面上,需要添加按钮/链接以将产品添加到第三方愿望清单站点.

现在我做了一些研究,并不完全清楚最好的方法是什么:

  1. 使用事件/观察者拦截'core_block_abstract_to_html_after'事件并在需要时添加我的html
  2. 在app/design/frontend/base/default/layout /中使用local.xml,使用'reference'或'update'标签在正确的页面上添加我的块.但是,我可以将此local.xml打包到我的扩展中吗?如果是这样,它是否会覆盖用户自己的local.xml.
  3. 使用Magento Widgets?看起来需要手动将小部件添加到管理CMS面板中的页面,而在管理配置中有一个开关可以禁用或启用包含额外内容.

理想情况下,扩展的用户需要进行最小配置(或XML编辑),并且扩展必须与现有布局或用户完成的修改兼容.

Ala*_*orm 7

这里没有单一的答案,就像任何与软件相关的问题都是关于什么最适合你,你的团队和你的用户的问题,这里有一些一般的经验法则.

CMS小部件用于内容管理.当您想要创建一个简单的用户界面时,您可以创建一个小部件,其中商店所有者可以创建键入的内容,然后可以将其插入到页面中.分发需要修改页面的扩展或创建开/关功能不是一个好选择.理想的用例是Magento解决方案提供商创建特定的小部件和小部件工作流,商店所有者内容人员更新小部件并将其添加到页面,同时管理网站的内容.

local.xml文件用于此特定商店/主题的本地布局更新,并且需要很少的编程逻辑.您添加的具体提及local.xmlapp/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');
Run Code Online (Sandbox Code Playgroud)

并且some_block不存在,您将在非对象上调用方法时遇到致命的PHP错误.这意味着你的观察者最终会得到很多像这样的代码

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

使用布局xml更新文件的一个好处是生产商店上的这些错误无声地失败(尽管这是开发功能时令人抓狂的同样的静默失败)

希望有所帮助,祝你好运!如果有疑问,请使用让您完成工作的技术 - 您可以随时重新考虑因素.