Magento 模块开发之 System.xml 配置详解

system.xml 和 config.xml 比较相似, 都位于模块 etc 文件夹中, 且都是用来进行配置, 但其主要用于后台 System -> Configuration 中创建配置信息
为了能更好的理解 system.xml 的功能和显示位置, 请认真看一下如下结构图, 这个页面被分成了几块: 标签(Tab), 区域(Section), 组(Group), 域(Field)

文本域 (Field)

我们先从基础开始, 首先简单的在 ‘system -> Configuration -> Customer Configuration -> Create New Account Options’ Group 里创建两个文本域



 
 
  
  
  
  
  
select 
adminhtml/system_config_source_email_template  
3  
1  
1 
1 


  


text   
99
1
1
1






显示的效果:

如果你想获取到这些文本域的值, 你可以在模块里使用方法: Mage::getStoreConfig(‘section_key/group_key/field_key’, Mage::app()->getStore());
以如上为例:

Mage::getStoreConfig(‘customer/create_account/slider’, Mage::app()->getStore());

当在后台填写保存后, Magento 将这些值都存在 core_config_data 表中, 如果你看下表结构, 就可以很清楚的看到 scope, path 和 value 等字段, path列就是存储文本域的路径, 也就是 Mage::getStoreConfig() 方法中的参数一
组 (Group)
这里,我们再来创建一个新的 Group, 代码如下:






 
  
10 
1
0
0



select
adminhtml/system_config_source_email_template
3
1
1
1





select
adminhtml/system_config_source_yesno
99
1
1
1






输出如下效果:

区域 (Section)

 

这里,我们来创建一个新的 Section, 代码如下:






customer
130
1
1
1



10
1
1
1



select
adminhtml/system_config_source_email_template
3
1
1
1





select
adminhtml/system_config_source_yesno
99
1
1
1






完成后, 你应该可以在 Customer Tab 里看到 “New Test Section”, 但还需要一步, 那就是要在 config.xml 里添加权限(ACL), 不然你点击就会发现 404 错误, 你可以看下类: Mage_Adminhtml_System_ConfigController, 在 259 行左右的 _isSectionAllowed($section) 方法, 它会检查新的 seciton 是否有权限, 如果有才会显示出来

现在在 config.xml 里的 标签中写入如下代码:

<acl>
    <resources>
        <admin
            <children>
                <system>
                    <children>
                        <config>
                            <children>
                                <testsection translate="title" module="test"
                                     < title >Test Section ACL title                                      < sort_order >99 sort_order >                                  testsection >                              children >                          config >                      children >                  system >              children >          admin >      resources > acl >

现在你登出后台, 重新登入, 新的 section 已经工作正常了

标签 (Tab)

 

创建一个新的 tab, 代码如下:

xml version="1.0"?>
<config>
    <tabs>
        <newtab translate="label" module="customer">
            <label>New Tablabel>
            <sort_order>1sort_order>
        newtab>
    tabs>
    <sections>
        <testsection translate="label" module="test">
            <class>separator-topclass>
            <label>New Test Sectionlabel>
            <tab>newtabtab>
            <sort_order>130sort_order>
            <show_in_default>1show_in_default>
            <show_in_website>1show_in_website>
            <show_in_store>1show_in_store>
            <groups>
                <test translate="label">
                    <label>Test Grouplabel>
                    <sort_order>10sort_order>
                    <show_in_default>1show_in_default>
                    <show_in_website>1show_in_website>
                    <show_in_store>1show_in_store>
                    <fields>
                        <patient translate="label">
                            <label>Sign In Gate Email Templatelabel>
                            <frontend_type>selectfrontend_type>
                            <source_model>adminhtml/system_config_source_email_templatesource_model>
                            <sort_order>3sort_order>
                            <show_in_default>1show_in_default>
                            <show_in_website>1show_in_website>
                            <show_in_store>1show_in_store>
                        patient>
                    fields>
                    <fields>
                        <slider translate="label">
                            <label>Show Slider In Sign In Gatelabel>
                            <frontend_type>selectfrontend_type>
                            <source_model>adminhtml/system_config_source_yesnosource_model>
                            <sort_order>99sort_order>
                            <show_in_default>1show_in_default>
                            <show_in_website>1show_in_website>
                            <show_in_store>1show_in_store>
                       slider>
                    fields>
                test>
            groups>
        testsection>
    sections>
config>

同样, 此操作也需要之前的 ACL 配置, 有些情况下会报 permission 错误, 你可以到 System -> Permission ->Roles, 点击你的角色编辑再保存

为新建的文本域添加默认值

 

在 system.xml 中完成如上操作后, 我们也可以为其添加默认值, 比如说有一个 Yes/No 下拉框, 你可以在 config.xml 中添加默认值:

<default
    <testsection
        <test> 
            <patient>1patient> 
            <slider>1slider>
        test>
    testsection>
default>

到这里就了解了 system.xml 的基础, 在随后的章节里, 我会列出不同种类的文本域, 方便大家以后使用时可以直接查阅调用

你可能感兴趣的:(magento)