如何使用源模型获取商店配置字段的值标签

时间:2014-03-27 08:25:29

标签: magento

我试图遍历每个配置字段以获取每个范围级别的每个字段的值。这是迄今为止的代码:

$ path将是一系列配置路径,例如' general / country / default',' general / country / allow',' general / region / display_all&#39 ;等等。下面的函数将迭代每个$ path元素。

$value = Mage::getConfig()->getNode($path, 'default');

// ...

foreach (Mage::app()->getWebsites() as $website) {
    $value = Mage::getConfig()->getNode($path, 'website', $website->getCode());

    // ...

    foreach ($website->getGroups() as $group) {                
        foreach ($group->getStores() as $store) {
            $value = Mage::getConfig()->getNode($path, 'store', $store->getCode());

            // ...

        }
    }
}

除下拉列表和其他字段外,此方法正常。在是/否下拉列表中,它将返回1/0而不是是/否。在国家/地区下拉列表中,它将返回美国而不是美国等。

我非常确定我需要通过源模型运行返回的值,但我不知道如何以编程方式获取每个$ path的源模型?

或许还有另一种方式......

1 个答案:

答案 0 :(得分:4)

以下是如何获取配置设置的源模型 您可以将其集成到脚本中。

第1步
您需要一种方法来获取system.xml文件的内容。

$config = Mage::getConfig()->loadModulesConfiguration('system.xml')->applyExtends();

第2步
您需要一种方法将配置节点名称(general/country/allow)“转换”为system.xmlsections/general/groups/country/fields/allow)的路径。
机制就是这个

general/country/allow -------------------|
   |       |                             |
   |       |--------------|              |
   |                      |              |
   |-------|              |              |
           |              |              |
sections/general/groups/country/fields/allow
   |               |               |
   |               |               |
   |-------always the same---------|

这是一个简单的功能。

function getSystemPath($path) {
    $newPath = '';
    $parts = explode('/', $path);
    if (count($parts) != 3) { //you must have at least 3 parts in the node name
        return '';
    }
    return 'sections/'.$parts[0].'/groups/'.$parts[1].'/fields/'.$parts[2];

}

第3步。
现在获取source_model节点

$path = 'general/country/allow'
$node = $config->getNode(getSystemPath($path)); //get the corresponding system.xml path from the config loaded at step 1.
if ($node && $node->source_model){  //if there is a source model
    //instantiate the model - use getSingleton in case there are more fields that use the same source model
    $model = Mage::getSingleton((string)$node->source_model);
    //get options
    $options = $model->toOptionArray();
    //do something with $options.
}

[编辑]

如果要为单个模块加载system.xml文件,可以执行以下操作:

$configFile = Mage::getConfig()->getModuleDir('etc', 'Mage_Catalog').DS.'system.xml';
$string = file_get_contents($configFile);
$xml = simplexml_load_string($string, 'Varien_Simplexml_Element');

但请记住这一点。模块可以覆盖或添加其他模块的配置区域中的元素。