深入理解Magento – 第十一章 – Magento的默认系统配置值

2011年09月04日 灵犀一指 深入理解Magento – 第十一章 – Magento的默认系统配置值已关闭评论 阅读 901 人 次

This is more of an addendum to my previous articles on the System Configuration system than an entirely new article. Go back and read up if anything’s over your head.

When you create a new System Configuration path, Magento doesn’t store a default value. This is true even for the default stock system configuration. You can confirm this by looking at the core_config_datatable.

mysql> select * from core_config_data ;
| config_id | scope | scope_id | path | value |

This table will only store values that have been explicitly set via the Admin Console or other programatic means. If you request the value of a System Configuration path that doesn’t have a value explicitly set, Magento will check the global config tree for a default value. Although not required, it’s a good idea to set a default value for your custom configuration variables. It’s simple enough to do, and will ensure nothing unexpected happens when a blank value is retrieved for your config variables.

Setting up Default Values

As previously mentioned, default values are stored in the global config tree. This is slightly counter-intuitive, as one might expect the values to be stored in the same system.xmlthat the paths themselves are configured in. As with many things Magento, the old

Ours is not to question why, ours is but to do or die

serves as your best bet for coping with this. If that’s not good enough, try thinking of the global config as a place to store commonly used values, and system.xml as the place you configure a UI for changing those values. Hand holding out of the way, let’s get to it. In your module’s config.xml, add a top level section named <default/>.

1 <!-- File: app/code/local/Packagename/Modulename/etc/config.xml -->
2 <config>
3  <!-- ... -->
4  <default>
5  </default>
6  <!-- ... -->
7 </config>

This is the top-level node where you’ll be storing your default values. Next, take your configuration path, and convert it into an XML tree node. For example, if you were setting up a default value for the configuration path


your config would look something like

01 <!-- File: app/code/local/Packagename/Modulename/etc/config.xml -->
02 <config>
03  <!-- ... -->
04  <default>
05  <design>
06  <header>
07  <welcome>Default welcome msg!</welcome>
08  </header>
09  </design>
10  </default>
11  <!-- ... -->
12 </config>

With a configuration setup like the one above, requests for


would, with no value configured, return the text “Default welcome msg!”. This example is based on an existing configuration setting in a stock Magento install. Remember, most of Magento functionality is built using the same Module system you use to customize the system. Let’s take a look at the actual configuration of the design/header/welcomevalue.

01 <!-- File: app/code/core/Mage/Page/etc/config.xml -->
02 <default>
03  <design>
04  <headtranslate="default_description"module="page">
05  <default_title>Magento Commerce</default_title>
06  <default_description>Default Description</default_description>
07  <default_keywords>Magento, Varien, E-commerce</default_keywords>
08  <default_robots>*</default_robots>
09  <default_media_type>text/html</default_media_type>
10  <default_charset>utf-8</default_charset>
11  </head>
12  <headertranslate="welcome"module="page">
13  <logo_src>images/logo.gif</logo_src>
14  <logo_alt>Magento Commerce</logo_alt>
15  <welcome>Default welcome msg!</welcome>
16  </header>
17  <footertranslate="copyright"module="page">
18  <copyright>&amp;copy; 2008 Magento Demo Store. All Rights Reserved.</copyright>
19  </footer>
20  </design>
21 </default>

This is the full default configuration for the


configuration hierarchy. One thing different from our previous examples is the optional translation attributes.

1 <headertranslate="welcome" module="page">

The translate and moduleattributes tell the system which nodes need to be translated, and which module’s Data Helper should be used to do the translating. In the above example that means the welcome node would be translated with

1 Mage::helper('page')->__(...);

Remember, if you call the helper factory without a second URI portion, Magento will default to the data helper.

1 //the same
2 Mage::helper('page')->__(...);
3 Mage::helper('page/data')->__(...);

If you wanted multiple sub-nodes to be translated, just separate the names with commas

1 <example translate="foo,baz,bar"module="page">


Short and sweet this week. While not necessary, it’s a good idea to set your System Configuration paths with default values. By setting a default early, you ensure that there will alwaysbe a logical value returned for the configuration path and not have to worry about jury rigging one in later, when a user may have inadvertently saved a value with an empty string.

Originally published November 28, 2010