7

许多扩展(包括我编写的扩展)包括一个帮助类,它只是扩展抽象基类而不添加任何功能。助手通常如下所示:

class MyCompany_MyModule_Helper_Data extends Mage_Core_Helper_Abstract {
}

因此,扩展类仅用于抽象类提供的东西,尤其是用于翻译。另一方面,Magento 中的所有 Block 和 Controller 类都继承了__()翻译方法 - 在我目前正在开发的扩展中,我甚至不需要调用帮助程序类一次。

我可以删除助手类并将其从中删除config.xml吗?我已经尝试过了,扩展似乎可以正常工作,但由于 Magento 的复杂性,我总是有点担心会有我不知道的影响。

4

2 回答 2

10

如果你从头开始创建一个模块,辅助类并不是绝对必要的。我通常会跳过创建一个,直到需要它。

但是,如果任何 XML 文件使用该module属性来指定翻译模块,则该属性需要解析为有效的帮助程序。例如,在这个核心文件中

<!-- File: app/code/core/Mage/Catalog/etc/system.xml -->
<tabs>
    <catalog translate="label" module="catalog">
        <label>Catalog</label>
        <sort_order>200</sort_order>
    </catalog>
</tabs>

module="catalog"。通过指定此属性,翻译标签的 Magento 系统代码将如下所示

Mage::helper('catalog')->__('Label');

因此,从目录模块中删除帮助程序会破坏 Magento 的某些部分。

(单部分类别名由Magento系统代码catalog自动转换为)Mage::helper('catalog/data')

Magento 的许多XML 文件中都使用了这种“分组翻译助手”功能,而不仅仅是system.xml(布局、小部件等)。此外,Magento 中的某些系统会推断和/或要求存在用于翻译的辅助模块(访问控制、外部 API 系统等)。

长话短说:如果您从头开始创建模块,请随时将帮助程序排除在外,直到您开始遇到 Magento 无法实例化帮助程序的错误。永远不要从模块中删除现有的帮助器,如果你想确保你与其他人可能做出的假设 100% 兼容,请始终包含一个Data.php帮助器类。

于 2012-12-22T20:19:31.467 回答
4

Magento 的 Helper 类包含实用方法,允许您对对象和变量执行常见任务。http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-1-introduction-to-magento#6

假设 Helper 文件为空且没有自定义方法,例如。

<?php 
class MagePal_SomeModule_Helper_Data extends Mage_Core_Helper_Abstract
{
}

那么一些可能仍然受到影响的事情是:

  • system.xml - admin -> system -> config 中模块的空白屏幕
  • $this->__('') - .phtml 模板中的错误(用于国际化/翻译)

因此,如果您的助手是空的,没有系统配置部分且没有翻译,那么“也许”可以删除。

于 2012-12-22T19:50:46.873 回答