本节并没有太多新内容,更多的是对前面有关系统后台配置的补充。在我们创建新的系统配置路径时,Magento并没有存储默认值,甚至对于一些系统默认配置也是如此,这点可以通过查看core_config_data表来进行验证。
mysql> select * from core_config_data; +-----------+---------+---------+----------------------------+--------+ | config_id | scope | scope_id| path | value | +-----------+---------+---------+----------------------------+--------+ | 1 | default | 0| general/region/display_all | 1 | ... ...
这张表仅存储在后台或基它程序中明确设置的值,而如果请求一个没有进行这个设置的系统配置值的话,Magento会到全局配置文件中去查看默认值。虽然不要求这么做,但为自添加配置变量设置一个默认值是一个不错的习惯。这样做很简单,也防止在获取到空值时产生一些意想不到的效果。
上面提到默认值存放在全局配置文件中,这可能与很多的想法大相径庭,因为大家可能会认为这默认值会存储在用于配置后台的system.xml文件中。为什么要这么做其实大可不必深究,我们可以理解为配置文件中存储常用的值,而stystem.xml中存储着用于修改这些值的界面的配置。
在模块配置文件config.xml里添加一个<default />代码块(如app/code/local/Packagename/Modulename/etc/config.xml)
<config> <!-- ... --> <default> </default> <!-- ... --> </config>
这就是我们用于存储默认值的最上级节点,接下来将配置路径转化成XML格式的树形节点,比如我们为以下配置路径设置默认值:
design/header/welcome
那么在config.xml的代码就会是这样:
<config> <!-- ... --> <default> <design> <header> <welcome>Default welcome msg!</welcome> </header> </design> </default> <!-- ... --> </config>
应用了这个配置后,请求design/header/welcome时,如果没有设定值,就会返回”Default welcome msg!”。这个例子是基本系统默认的配置,我们业看看design/header/welcome的真实配置(文件地址:app/code/core/Mage/Page/etc/config.xml):
<default> <design> <head translate="default_description" module="page"> <default_title>Magento Commerce</default_title> <default_description>Default Description</default_description> <default_keywords>Magento, Varien, E-commerce</default_keywords> <default_robots>*</default_robots> <default_media_type>text/html</default_media_type> <default_charset>utf-8</default_charset> </head> <header translate="welcome" module="page"> <logo_src>images/logo.gif</logo_src> <logo_alt>Magento Commerce</logo_alt> <logo_src_small>images/logo.gif</logo_src_small> <welcome>Default welcome msg!</welcome> </header> <footer translate="copyright" module="page"> <copyright>&copy; 2015 Magento Demo Store. All Rights Reserved.</copyright> </footer> </design> <system> <media_storage_configuration> <allowed_resources> <site_favicons>favicon</site_favicons> </allowed_resources> </media_storage_configuration> </system> </default>
这是所有design/*的默认配置,和我们例子中不同的时这里有一个translate属性:
<head translate="default_description" module="page">
translate和module属性告诉系统哪些节点需要被translate,以及使用哪个模块的Data Helper来进行这一操作。在上例中,welcome节点将被转化为:
Mage::helper('page')->__(...);
前面我们也提到过,如果调用helper类时URI没有传入第二部分,会默认使用data,也就是说下面两句代码是一样的:
Mage::helper('page')->__(...); Mage::helper('page/data')->__(...);
如果想要转化多个子节点,可以在名称之间用逗号进行分隔,如:
<example translate="foo,baz,bar" module="page">
写在后面
本系列更新到此结束,一共十二篇,大多数代码并非出自笔者之手,而是来自Magento资深大师Alan Storm,笔者只是用自己的理解丰富了一下内容,以有助于国内Magento学习者更为有效地掌握Magento开发相关知识。本系列的终结只是一个阶段性的符号,Magento作为一套强大的电商系统还有很值得探讨和学习的地方,需要大家共同努力去研究和分享,让我们一起努力吧!