예제 #1
0
 /**
  * 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;
 }