模块配置主要涉及到两个xml文件:config.xml和system.xml,除了这两个文件外,模型配置信息还有可能保存在下面的文件中:
- api.xml
- adminhtml.xml
- cache.xml
- widget.xml
- wsdl.xml
- wsi.xml
- convert.xml
下面我们先集中讲解config.xml文件,详细分解步骤如下:
- 第一步先在模块下etc内创建config.xml文件
- 将下面的代码入config.xml文件:
<?xml version="1.0"?> <config> <modules> <Mdg_Giftregistry> <version>0.1.0</version> </Mdg_Giftregistry> </modules> <global> <models> <mdg_giftregistry> <class>Mdg_Giftregistry_Model</class> </mdg_giftregistry> </models> <blocks> <mdg_giftregistry> <class>Mdg_Giftregistry_Block</class> </mdg_giftregistry> </blocks> <helpers> <mdg_giftregistry> <class>Mdg_Giftregistry_Helper</class> </mdg_giftregistry> </helpers> <resources> <mdg_giftregistry_setup> <setup> <module>Mdg_Giftregistry</module> </setup> </mdg_giftregistry_setup> </resources> </global> </config>
所有的模块配置都包含在节点内,该节点中包含<global>和<modules>两个节点。<modules>用于指定当前模块版本,用于在后面判断需要运行哪个安装或升级文件。通常使用以下三个主配置节点来指定配置作用域:
- <global>
- <adminhtml>
- <frontend>
这里我们先使用<global>作用域,这样配置将会同时作用于前台以及后台,在<global>节点下,又包含如下节点:
- <models>
- <blocks>
- <helpers>
- <resources>
从前面的代码可以看出,各个节点基本都采取如下的样式:
<context> <factory_alias> <class>NameSpace_ModuleName_ClassType</class> </factory_alias> </context>
Magento的工厂类使用每个节点来实例化我们的自定义对象,<factory_alias>节点是我们插件配置中重要部分,<factory_alias>节点被Mage::getModel()或Mage::getHelper()等工厂方法所使用。注意这里我们不是定义具体的模型、块文件或帮助类,而是告诉Magento的工厂类找到这些文件路径。Magento的命名规则使得我们可以在这些文件夹下使用任意的文件夹结构,根据类名Magento可精确地加载对应的类。(注:在Magento中类名和文件夹结构是相对应的。)
比如可以在app/code/local/Mdg/Giftregistry/Models/Folder1/Folder2/Folder3下创建一个新的模型类,从该类中实例化对象使用的工厂名为:
Mage::getModel('mdg_giftregistry/folder1_folder2_folder3_classname')
下面我们来创建一个模型,更确切的说应该是一个helper类,helper中通常包含一些应用方法,这些方法用于一些常用任务可在不同类中共享。首先创建一个空的helper类,后面再添加逻辑代码。我们所创建的Helper类地址为app/code/local/Mdg/Giftregistry/Helper/Data.php,代码如下:
<?php class Mdg_Giftregistry_Helper_Data extends Mage_Core_Helper_Abstract(){ } ?>
将这个Helper类命名为Data可能看上去有些奇怪,但事实上Magento的一个标准就是每个模块都有一个名为Data的helper类。关于helper类另一个比较有意思的方面是只能向工厂方法传递不包含类名的节点,并且默认将指向Data这个helper类。
所以这里如果想要实例化默认的helper类的话,需要运行如下代码:
Mage::helper('mdg_registry');
下一节我们一起来学习有关模型与数据保存相关的知识。