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

时间:2012-12-06 14:20:26

标签: 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小部件?看起来需要手动将小部件添加到管理CMS面板中的页面,而最好在管理配置中使用一个开关来禁用或启用包含额外内容。
  4. 理想情况下,扩展程序的用户需要进行最小配置(或XML编辑),并且扩展程序必须与现有布局或用户完成的修改兼容。

1 个答案:

答案 0 :(得分:7)

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

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

local.xml文件用于针对此特定商店/主题本地的布局更新,并且需要很少的编程逻辑。您对local.xml添加app/design/frontend/base/default/layout的具体提及对于您正在分发的扩展程序来说是一个特别糟糕的选择,因为用户在添加自己的local.xml文件后会立即丢失该扩展程序一个主题。 local.xml的理想用例是为商店所有者工作的开发人员(即与此特定Magento安装有长期关系),他们需要构建新页面或非管理内容/交互模块。第三方扩展程序不应向local.xml添加任何内容。

分发修改现有网页的扩展程序的官方祝福方式是

  1. 创建模块
  2. 使用该模块添加 布局xml更新文件(请参阅核心模块中的catalog.xml等文件)
  3. 使用布局更新XML文件进行更改
  4. 这使您在功能上与local.xml相同,但保持代码与本地用户的系统代码分开。如果您可以仅使用布局更新xml文件(blockreferenceactionifconfig等功能添加块并实现您的功能。)是个不错的选择。

    最后,使用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更新文件的一个好处是这些错误在生产商店中无声地失败(尽管同样的静默失败在开发某个功能时令人抓狂)

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