/** * Load declared modules configuration * * @param $mergeConfig * @return Mage_Core_Model_Config */ protected function _loadDeclaredModules($mergeConfig) { $moduleFiles = $this->_getDeclaredModuleFiles(); if (!$moduleFiles) { return; } if (VPROF) { Varien_Profiler::start('config/load-modules-declaration'); } $unsortedConfig = new Mage_Core_Model_Config_Base(); $unsortedConfig->loadString('<config/>'); $fileConfig = new Mage_Core_Model_Config_Base(); // load modules declarations foreach ($moduleFiles as $file) { $fileConfig->loadFile($file); $unsortedConfig->extend($fileConfig); } $moduleDepends = array(); foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) { $depends = array(); if ($moduleNode->depends) { foreach ($moduleNode->depends->children() as $depend) { $depends[$depend->getName()] = true; } } $moduleDepends[$moduleName] = array('module' => $moduleName, 'depends' => $depends); } // check and sort module dependens $moduleDepends = $this->_sortModuleDepends($moduleDepends); // create sorted config $sortedConfig = new Mage_Core_Model_Config_Base(); $sortedConfig->loadString('<config><modules/></config>'); foreach ($unsortedConfig->getNode()->children() as $nodeName => $node) { if ($nodeName != 'modules') { $sortedConfig->appendChild($sortedConfig->getNode(), $node); } } foreach ($moduleDepends as $moduleProp) { $node = $unsortedConfig->getNode('modules/' . $moduleProp['module']); $sortedConfig->appendChild($sortedConfig->getNode('modules'), $node); } $this->extend($sortedConfig); if (VPROF) { Varien_Profiler::stop('config/load-modules-declaration'); } return $this; }