这里没有单一的答案,就像任何与软件相关的东西一样,这都是关于什么对您、您的团队和您的用户最有效的问题,但这里有一些一般的经验法则。
CMS Widgets 用于内容管理。当您想要创建一个简单的用户界面时,您可以创建一个小部件,店主可以在其中创建类型化的内容,然后可以将其插入到页面中。分发需要修改页面的扩展或创建开/关功能不是一个好选择。理想的用例是 Magento 解决方案提供商创建特定的小部件和小部件工作流程,并且商店所有者内容人员更新小部件并将它们添加到页面,同时管理站点的内容。
该local.xml
文件用于此特定商店/主题本地的布局更新,并且需要很少的编程逻辑。local.xml
您对添加to的具体提及app/design/frontend/base/default/layout
对于您正在分发的扩展来说是一个特别糟糕的选择,因为一旦用户将自己的local.xml
文件添加到主题中,他们就会失去它。理想的用例local.xml
是为需要构建新页面或非管理内容/交互式模块的商店所有者(即与此特定 Magento 安装有长期关系)工作的开发人员。第三方扩展不应向local.xml
.
分发修改现有页面的扩展的官方祝福方式是
- 创建一个模块
- 使用该模块添加新的布局 xml 更新文件(参见
catalog.xml
核心模块中的文件)
- 使用此布局更新 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 更新文件的好处之一是这些类型的错误在生产商店中静默失败(尽管在开发功能时同样的静默失败令人抓狂)
希望对您有所帮助,祝您好运!如有疑问,请使用可让您完成工作的技术——您以后总是可以重新考虑因素。