Magento Store Configuration

Within Magento, we can use useful methods to return data that is saved within Magento’s configuration.

Mage::getStoreConfig()
Mage::getConfig()->getNode()
Mage::getStoreConfigFlag()

When using the getStoreConfig() method, we can pass in a single string parameter.

Mage::getStoreConfig('sectionName/groupName/fieldName');

The sectionName, groupName and fieldName are present under the <sections>, <groups> and <fields> nodes respectively in the system.xml files of Magento.

As an example, we can look at the system.xml file of the Mage_Catalog module.

<?xml version="1.0"?>
<config>
    <sections>
        <catalog translate="label" module="catalog">
            ....
            <groups>
                <frontend translate="label">
                    ....
                    <fields>
                        ....
                        <grid_per_page_values translate="label comment">
                            ....
                        </grid_per_page_values>
                        ....
                    </fields>
                </frontend>
                ....
            </groups>
            ....
        </catalog>
        ....
    </sections>
</config>

This means that we can get the value of this field by running the following.

Mage::getStoreConfig('catalog/frontend/grid_per_page_values');

Assuming this setting hasn’t been altered, Magento will give us the value.

12,24,36

You may also note that the Mage_Catalog module’s config.xml file has the default values saved for this setting.

<?xml version="1.0"?>
<config>
    <default>
        <catalog>
            ....
            <frontend>
                ....
                <grid_per_page_values>12,24,36</grid_per_page_values>
                ....
            </frontend>
            ....
        </catalog>
        ....
    </default>
    ....
</config>

The getStoreConfig() method can be found in the Mage.php class.

public static function getStoreConfig($path, $store = null)
{
    return self::app()->getStore($store)->getConfig($path);
}

The getStoreConfig() method delegates to the getConfig() method of the Mage_Core_Model_Store class.

public function getConfig($path)
{
    if (isset($this->_configCache[$path])) {
        return $this->_configCache[$path];
    }

    $config = Mage::getConfig();

    $fullPath = 'stores/' . $this->getCode() . '/' . $path;
    $data = $config->getNode($fullPath);
    if (!$data && !Mage::isInstalled()) {
        $data = $config->getNode('default/' . $path);
    }
    if (!$data) {
        return null;
    }
    return $this->_processConfigValue($fullPath, $path, $data);
}

Within the getConfig() method, we can see that the $path variable gets prefixed with stores/ and the store code to bring back a full path using the getNode() method.

The Mage::getConfig()->getNode() line directly reads from configuration files, therefore you have to specify the full path including the scope from within the config nodes of the configuration files, e.g. stores/default/section/group/field. We can also use default/section/group/field as well.

public function getNode($path=null, $scope='', $scopeCode=null)
{
    if ($scope !== '') {
        if (('store' === $scope) || ('website' === $scope)) {
            $scope .= 's';
        }
        if (('default' !== $scope) && is_int($scopeCode)) {
            if ('stores' == $scope) {
                $scopeCode = Mage::app()->getStore($scopeCode)->getCode();
            } elseif ('websites' == $scope) {
                $scopeCode = Mage::app()->getWebsite($scopeCode)->getCode();
            } else {
                Mage::throwException(Mage::helper('core')->__('Unknown scope "%s".', $scope));
            }
        }
        $path = $scope . ($scopeCode ? '/' . $scopeCode : '' ) . (empty($path) ? '' : '/' . $path);
    }

    /**
     * Check path cache loading
     */
    if ($this->_useCache && ($path !== null)) {
        $path   = explode('/', $path);
        $section= $path[0];
        if (isset($this->_cacheSections[$section])) {
            $res = $this->getSectionNode($path);
            if ($res !== false) {
                return $res;
            }
        }
    }
    return  parent::getNode($path);
}

The getStoreConfigFlag() method will always return a boolean, therefore it is useful for returning the values of Yes/No dropdowns that use the in built adminhtml/system_config_source_yesno source model.

<?xml version="1.0"?>
<config>
    <sections>
        <catalog translate="label" module="catalog">
            ....
            <groups>
                <frontend translate="label">
                    ....
                    <fields>
                        ....
                        <flat_catalog_product translate="label comment">
                            ....
                        </flat_catalog_product>
                        ....
                    </fields>
                </frontend>
                ....
            </groups>
            ....
        </catalog>
        ....
    </sections>
</config>

Therefore for the above XML, the following code can be used.

Mage::getStoreConfigFlag('catalog/frontend/flat_catalog_product');

To output either 1 or 0.

If you need to view the complete Magento config XML tree, you can use the code seen below.

Mage::getConfig()->getXmlString()

Note: This article is based on Magento Community/Open Source version 1.9.