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 Tab
label
>
<
sort_order
>1
sort_order
>
newtab
>
tabs
>
<
sections
>
<
testsection
translate
=
"label"
module
=
"test"
>
<
class
>separator-top
class
>
<
label
>New Test Section
label
>
<
tab
>newtab
tab
>
<
sort_order
>130
sort_order
>
<
show_in_default
>1
show_in_default
>
<
show_in_website
>1
show_in_website
>
<
show_in_store
>1
show_in_store
>
<
groups
>
<
test
translate
=
"label"
>
<
label
>Test Group
label
>
<
sort_order
>10
sort_order
>
<
show_in_default
>1
show_in_default
>
<
show_in_website
>1
show_in_website
>
<
show_in_store
>1
show_in_store
>
<
fields
>
<
patient
translate
=
"label"
>
<
label
>Sign In Gate Email Template
label
>
<
frontend_type
>select
frontend_type
>
<
source_model
>adminhtml/system_config_source_email_template
source_model
>
<
sort_order
>3
sort_order
>
<
show_in_default
>1
show_in_default
>
<
show_in_website
>1
show_in_website
>
<
show_in_store
>1
show_in_store
>
patient
>
fields
>
<
fields
>
<
slider
translate
=
"label"
>
<
label
>Show Slider In Sign In Gate
label
>
<
frontend_type
>select
frontend_type
>
<
source_model
>adminhtml/system_config_source_yesno
source_model
>
<
sort_order
>99
sort_order
>
<
show_in_default
>1
show_in_default
>
<
show_in_website
>1
show_in_website
>
<
show_in_store
>1
show_in_store
>
slider
>
fields
>
test
>
groups
>
testsection
>
sections
>
config
>
同样, 此操作也需要之前的 ACL 配置, 有些情况下会报 permission 错误, 你可以到 System -> Permission ->Roles, 点击你的角色编辑再保存
为新建的文本域添加默认值
在 system.xml 中完成如上操作后, 我们也可以为其添加默认值, 比如说有一个 Yes/No 下拉框, 你可以在 config.xml 中添加默认值:
<
default
>
<
testsection
>
<
test
>
<
patient
>1
patient
>
<
slider
>1
slider
>
test
>
testsection
>
default
>
到这里就了解了 system.xml 的基础, 在随后的章节里, 我会列出不同种类的文本域, 方便大家以后使用时可以直接查阅调用