第七章 – 自定义Magento系统配置1
2011-03-31 11:22
330 查看
Magento拥有十分强大的后台管理系统。作为一名开发人员,这套后台管理系统可以让你的用户简单直接的配置Magento系统或
者你创建的模块。和Magento的其他功能一样,你第一次使用这套管理系统的时候可能觉得很麻烦,但是一旦你上手了,你会发现它强大的功能是那么吸引
人。那么让我们开始吧。我们这一章的例子依然是基于Helloworld模块。
和全局配置(global config)相似,系统配置也是单独存储的。我们可以通过下面这段代码来获取系统配置文件
你可以把这段代码放到任何执行函数(Action
Method)中。“loadModulesConfiguration”方法会搜索所有配置好的模块的“etc”文件夹,寻找以传入的参数为名字的文
件,在这个例子中是“system.xml”。Magento有很多不同的配置文件,比如api.xml, wsdl.xml, wsdl2.xml,
convert.xml, compilation.xml, install.xml。你可以为你创建的模块创建这些配置文件。
认的标签页有General,Catalog,Customers,Sales,Services等等。我们来创建一个新的标签页叫做“Hello
Config”。创建如下文件
我们来解释一下各个节点(Tag)的意思。【译者注:由于Tab和Tag中文翻译都是标签,所以这里我把Tag翻译成节点,以免混淆】“”就是我们要添加的标签页的定义节点,“helloconfig”是节点的ID。你可以任意命名这个ID,但是必须全局唯一,也就是不能和别人用同样的ID。这个ID是用来唯一标示你的标签页的。“module=helloworld”,意思是这个标签页属于哪个模块。“”节点的内容是标签的名字,也就是要显示在界面上的名字。“”指明了这个标签页显示的位置。
打开后台“System->Configuration”,你会看到如下错误
Classes)。这些类用来提供一些不适合放在模型,视图或者控制器中的功能。Magento的帮助类也是采用分组类名的机制。也就是说我们可以覆盖默
认的帮助类,同时我们需要在config.xml中指定帮助类的基类名。
Magento系统默认模块有一个默认的帮助类。正如我们上面的异常显示,我们的Helloworld模块并没有指定一个默认的帮助类。下面让我们来添加一个。修改config.xml
你现在应该对这类配置相当熟悉了。“”节点就是模块的名字,“”就是帮助类的基类名,命名方式如下
帮助类是通过全局对象Mage的静态方法“helper”来装载的。
根据我们的配置,上面这行代码将会装载以下类
我们上面说过Magento默认每个模块有一个帮助类“data”
上面这两行代码是等价的,都会装载以下类
下面我们来创建我们的帮助类
清空Magento缓存,重新装载页面,你会发现错误不见了,但是我们的标签页还是没有出来。如果你好奇帮助类究竟能干什么,建议你去看看“Mage_Core_Helper_Abstract”类。
个例子,“Advanced”标签页默认包含“Admin, System, Advanced,
Developer”四个段。如果一个标签页不包含任何段,那么这个标签页不会被显示出来。下面我们在system.xml中添加“
”节点
这里有些节点你应该很熟悉,就不多解释了,来讲讲以前没见过的。
好了,我们已经配置好段了,清空缓存,再一次刷新页面,你应该看到“HELLO CONFIG”标签页显示出来了。
Options”,你大概会很失望。什么都没有显示出来,连左边的导航栏都没有了。这是因为“Adminhtml”在权限控制列表(Access
Control List,
ACL)中找不到我们创建的段的权限信息。【译者注:Adminhtml就是Magento的后台管理系统,属于Magento的一个核心模块】
ACL是一个很复杂的话题,但是我会介绍一些最基本的概念,以便于理解Magento的权限控制。这部分内容和上下文关系不大,如果你不感兴趣,可以直接跳到本节结尾,复制一段XML到你的config.xml就行了。
在Magento中,对于有些资源的访问时有限制的。用户必须先经过认证才能访问相关资源。在这里,资源(Resource)是一个广义的概念,它
可能是 指一个页面,也可能是一个功能。Magento的系统配置功能(System Config)就是需要认证才能访问的资源。
任何一个资源都是通过一个URI来标识。比如说“web”配置段(属于后台管理General标签页)的URI是
我们“helloworld_options”段的URI是
当一个用户访问一个受保护的资源的时候,后台管理系统(Adminhtml)的执行控制器会执行以下步骤
为用户正在访问的资源生成一个URI
根据ACL系统检查该用户是否有权限访问指定的资源
如果用户拥有访问权限,那么进行用户指定的操作。否则,跳转到相应的错误页面(也可能是停止操作或者显示空白页面)。
如果你去“System -> Permissions -> Roles”页面,点击“Add New Role”按钮,你会看到所有系统的资源都以树形结构显示在页面上。
在config.xml中,添加以下内容
让我们来分析一下这段代码。所有的资源定义都包含在如下代码中
在节点下面,每一个子节点都是URI的一部分,比如
代表URI
最后一个节点
这里
清空Magento缓存,刷新页面,你应该能看到我们创建的配置段了,标准的后台管理页面,但是主体内容是空的,只有一个“Save
Config”按钮。你可能需要重新登录后台管理才能看到正确的页面。那是因为后台管理有一些额外的缓存。【译者注:我们添加了权限以后,管理员是默认拥
有该权限的,所以我们用管理员登录后台管理系统就能访问我们创建的段】
请注意,不懂事出于什么原因,Magento把部分从全局配置中删掉了。所以,我们不能用之前创建的Configviewer来查看这部分内容。我正在研究Magento把存在哪里了。
为了您的安全,请只打开来源可靠的网址
打开网站
取消
来自: http://hi.baidu.com/190420456/blog/item/449ace450ac0f943510ffe97.html
者你创建的模块。和Magento的其他功能一样,你第一次使用这套管理系统的时候可能觉得很麻烦,但是一旦你上手了,你会发现它强大的功能是那么吸引
人。那么让我们开始吧。我们这一章的例子依然是基于Helloworld模块。
添加系统配置文件
首先我们要为模块添加一个系统配置文件。这个文件和“config.xml”是不搭界的app/ code/ local/ Zhlmmc/ Helloworld/ etc/ system . xml
和全局配置(global config)相似,系统配置也是单独存储的。我们可以通过下面这段代码来获取系统配置文件
//header('Content-Type: text/xml'); header ( 'Content-Type: text/plain' ) ; echo $config = Mage:: getConfig ( ) -> loadModulesConfiguration ( 'system.xml' ) -> getNode ( ) -> asXML ( ) ; exit ;
你可以把这段代码放到任何执行函数(Action
Method)中。“loadModulesConfiguration”方法会搜索所有配置好的模块的“etc”文件夹,寻找以传入的参数为名字的文
件,在这个例子中是“system.xml”。Magento有很多不同的配置文件,比如api.xml, wsdl.xml, wsdl2.xml,
convert.xml, compilation.xml, install.xml。你可以为你创建的模块创建这些配置文件。
添加一个标签页
我们首先在后台系统管理页面添加一个标签页(Tab)。标签页就是后台“System->Configuration”页面左侧的导航栏。默认的标签页有General,Catalog,Customers,Sales,Services等等。我们来创建一个新的标签页叫做“Hello
Config”。创建如下文件
Location:
app/ code/ local/ Zhlmmc/ Helloworld/ etc/ system . xml
<
config>
<
tabs>
<
helloconfig translate=
"label"
module=
"helloworld"
>
<
label>
Hello Config</
label>
<
sort_order>
99999
</
sort_order>
</
helloconfig>
</
tabs>
</
config>
我们来解释一下各个节点(Tag)的意思。【译者注:由于Tab和Tag中文翻译都是标签,所以这里我把Tag翻译成节点,以免混淆】“”就是我们要添加的标签页的定义节点,“helloconfig”是节点的ID。你可以任意命名这个ID,但是必须全局唯一,也就是不能和别人用同样的ID。这个ID是用来唯一标示你的标签页的。“module=helloworld”,意思是这个标签页属于哪个模块。“”节点的内容是标签的名字,也就是要显示在界面上的名字。“”指明了这个标签页显示的位置。
打开后台“System->Configuration”,你会看到如下错误
Fatal error: Class 'Mage_Helloworld_Helper_Data' not found in….
Magento Helper简介
正如许多其他的PHP MVC系统一样,Magento也有帮助类(HelperClasses)。这些类用来提供一些不适合放在模型,视图或者控制器中的功能。Magento的帮助类也是采用分组类名的机制。也就是说我们可以覆盖默
认的帮助类,同时我们需要在config.xml中指定帮助类的基类名。
Magento系统默认模块有一个默认的帮助类。正如我们上面的异常显示,我们的Helloworld模块并没有指定一个默认的帮助类。下面让我们来添加一个。修改config.xml
File : app/ code/ local/ Zhlmmc/ Helloworld/ etc/ config. xml < ! – … –> < global> < ! – … –> < helpers> < helloworld> < class> Zhlmmc_Helloworld_Helper</ class> </ helloworld> </ helpers> < ! – … –> </ global> < ! – … –>
你现在应该对这类配置相当熟悉了。“”节点就是模块的名字,“”就是帮助类的基类名,命名方式如下
Packagename_Modulename_Helper
帮助类是通过全局对象Mage的静态方法“helper”来装载的。
Mage:: helper ( 'helloworld/foo' )
根据我们的配置,上面这行代码将会装载以下类
app/ code/ local/ Zhlmmc/ Helper/ Foo. php class Zhlmmc_Helloworld_Helper_Foo
我们上面说过Magento默认每个模块有一个帮助类“data”
Mage:: helper ( 'helloworld' ) ; Mage:: helper ( 'helloworld/data' ) ;
上面这两行代码是等价的,都会装载以下类
app/ code/ local/ Zhlmmc/ Helper/ Data. php class Zhlmmc_Helloworld_Helper_Data
下面我们来创建我们的帮助类
File
:
app/ code/ local/ Zhlmmc/ Helper/ Data. php class Zhlmmc_Helloworld_Helper_Data extends
Mage_Core_Helper_Abstract
{
}
清空Magento缓存,重新装载页面,你会发现错误不见了,但是我们的标签页还是没有出来。如果你好奇帮助类究竟能干什么,建议你去看看“Mage_Core_Helper_Abstract”类。
添加新的段
好了,帮助类的介绍到此结束。下面我们来看看为什么我们的标签页不显示出来。在Magento中,每一个标签页都包含很多段(section)。举个例子,“Advanced”标签页默认包含“Admin, System, Advanced,
Developer”四个段。如果一个标签页不包含任何段,那么这个标签页不会被显示出来。下面我们在system.xml中添加“
”节点
Location:
app/ code/ local/ Zhlmmc/ Helloworld/ etc/ system . xml
<
config>
<
tabs>
<
helloconfig translate=
"label"
module=
"helloworld"
>
<
label>
Hello Config</
label>
<
sort_order>
99999
</
sort_order>
</
helloconfig>
</
tabs>
<
sections>
<
helloworld_options translate=
"label"
module=
"helloworld"
>
<
label>
Hello World Config Options</
label>
<
tab>
helloconfig</
tab>
<
frontend_type>
text</
frontend_type>
<
sort_order>
1000
</
sort_order>
<
show_in_default>
1
</
show_in_default>
<
show_in_website>
1
</
show_in_website>
<
show_in_store>
1
</
show_in_store>
</
helloworld_options>
</
sections>
</
config>
这里有些节点你应该很熟悉,就不多解释了,来讲讲以前没见过的。
什么是?
和前面的相似,这个节点是用来唯一标示你的段,“helloworld_options”就是段的ID,可以随意取名,只要不重复就好。什么是?
这个节点有点搞。“”在配置文件的其他部分有用(稍后会讲),放在这里其实没什么作用。但是核心模块在此处的配置文件都包含这个节点,所以我们也把它添加进去。什么是,< show_in_website />,?
这些节点的值是布尔类型的,0或者1。这些标签是用来控制在不同的环境下,当前段是否应该显示。好了,我们已经配置好段了,清空缓存,再一次刷新页面,你应该看到“HELLO CONFIG”标签页显示出来了。
访问控制
如果你刚才点了我们创建的标签页下面的“Hello World ConfigOptions”,你大概会很失望。什么都没有显示出来,连左边的导航栏都没有了。这是因为“Adminhtml”在权限控制列表(Access
Control List,
ACL)中找不到我们创建的段的权限信息。【译者注:Adminhtml就是Magento的后台管理系统,属于Magento的一个核心模块】
ACL是一个很复杂的话题,但是我会介绍一些最基本的概念,以便于理解Magento的权限控制。这部分内容和上下文关系不大,如果你不感兴趣,可以直接跳到本节结尾,复制一段XML到你的config.xml就行了。
在Magento中,对于有些资源的访问时有限制的。用户必须先经过认证才能访问相关资源。在这里,资源(Resource)是一个广义的概念,它
可能是 指一个页面,也可能是一个功能。Magento的系统配置功能(System Config)就是需要认证才能访问的资源。
任何一个资源都是通过一个URI来标识。比如说“web”配置段(属于后台管理General标签页)的URI是
admin/ system / config/ web
我们“helloworld_options”段的URI是
admin/ system / config/ helloworld_options
当一个用户访问一个受保护的资源的时候,后台管理系统(Adminhtml)的执行控制器会执行以下步骤
为用户正在访问的资源生成一个URI
根据ACL系统检查该用户是否有权限访问指定的资源
如果用户拥有访问权限,那么进行用户指定的操作。否则,跳转到相应的错误页面(也可能是停止操作或者显示空白页面)。
如果你去“System -> Permissions -> Roles”页面,点击“Add New Role”按钮,你会看到所有系统的资源都以树形结构显示在页面上。
添加ACL权限
刚才说ACL中没有我们配置段的信息,那么我们来创建一个。请注意,如果你是创建一个新的段,那么你需要创建一个新的权限,如果你在已有的段上添加内容,你不需要创建权限。在config.xml中,添加以下内容
File : app/ code/ local/ Zhlmmc/ Helloworld/ etc/ config. xml < config> < ! – … –> < adminhtml> < acl> < resources> < admin> < children> < system> < children> < config> < children> < helloworld_options> < title> Store Hello World Module Section</ title> </ helloworld_options> </ children> </ config> </ children> </ system> </ children> </ admin> </ resources> </ acl> </ adminhtml> < ! – … –> </ config>
让我们来分析一下这段代码。所有的资源定义都包含在如下代码中
< adminhtml> < acl> < resources> </ resources></ acl> </ adminhtml>
在节点下面,每一个子节点都是URI的一部分,比如
< admin> < children> < system> < children></ children></ system></ children></ admin>
代表URI
admin/ system
最后一个节点
< helloworld_options> < title> Store Hello World Module Section</ title> </ helloworld_options>
这里
清空Magento缓存,刷新页面,你应该能看到我们创建的配置段了,标准的后台管理页面,但是主体内容是空的,只有一个“Save
Config”按钮。你可能需要重新登录后台管理才能看到正确的页面。那是因为后台管理有一些额外的缓存。【译者注:我们添加了权限以后,管理员是默认拥
有该权限的,所以我们用管理员登录后台管理系统就能访问我们创建的段】
请注意,不懂事出于什么原因,Magento把部分从全局配置中删掉了。所以,我们不能用之前创建的Configviewer来查看这部分内容。我正在研究Magento把存在哪里了。
为了您的安全,请只打开来源可靠的网址
打开网站
取消
来自: http://hi.baidu.com/190420456/blog/item/449ace450ac0f943510ffe97.html
相关文章推荐
- magento 开发 -- 深入理解Magento第七章 – 自定义Magento系统配置
- 第七章 – 自定义Magento系统配置
- 深入理解Magento - 第七章 – 自定义Magento系统配置
- 第七章 – 自定义Magento系统配置2
- Magento自定义系统配置
- 自定义Magento系统配置
- 自定义Magento系统配置
- CentOS 7系统下配置自定义JDK的教程
- 配置Info.plist (设置状态栏样式、自定义定位时系统弹出的提示语、配置3DTouch应用快捷菜单)
- 深入理解Magento的配置系统
- C# App.config 自定义 配置节 报错“配置系统未能初始化” 解决方法
- Magento强大的配置系统(1)
- Magento如何在XML配置文件中自定义页面title?
- magento添加系统sections配置时应注意的事项
- magento ----系统配置
- 第七章 Spring Cloud 自定义Ribbon的负载均衡yml配置)
- 从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)
- 深入浅出Android Gradle构建系统(四:自定义构建过程之配置manifest)
- C# App.config 自定义 配置节 出现的问题:配置系统未能初始化
- magento 开发 -- 入门深入理解第七章 – 自定义Magento系统配置