| | 148 | |
| | 149 | /** |
| | 150 | * �нициализация модуля |
| | 151 | * |
| | 152 | * @param unknown_type $oModule |
| | 153 | * @param unknown_type $bHookParent |
| | 154 | */ |
| | 155 | protected function InitModule($oModule, $bHookParent = true){ |
| | 156 | $sOrigClassName = $sClassName = get_class($oModule); |
| | 157 | if($this->isInit($sClassName)){ |
| | 158 | return; |
| | 159 | } |
| | 160 | $bRunHooks = false; |
| | 161 | if($this->isInit('hook')){ |
| | 162 | $bRunHooks = true; |
| | 163 | if($bHookParent){ |
| | 164 | while(preg_match('#^Plugin#i', $sClassName)){ |
| | 165 | $sParentClassName = get_parent_class($sClassName); |
| | 166 | if($sParentClassName == 'Module'){ |
| | 167 | break; |
| | 168 | } |
| | 169 | $sClassName = $sParentClassName; |
| | 170 | } |
| | 171 | } |
| | 172 | } |
| | 173 | if($bRunHooks){ |
| | 174 | $this->Hook_Run($sClassName.'_init_start'); |
| | 175 | } |
| | 176 | $oModule->Init(); |
| | 177 | $oModule->SetInit(); |
| | 178 | if(!isset($this->aModules[$sOrigClassName])){ |
| | 179 | $this->aModules[$sOrigClassName] = &$oModule; |
| | 180 | } |
| | 181 | if($bRunHooks || $sClassName == 'ModuleHook'){ |
| | 182 | $this->Hook_Run($sClassName.'_init_complete'); |
| | 183 | } |
| | 184 | } |
| | 185 | |
| 159 | | /** |
| 160 | | * Создаем объект модуля |
| 161 | | */ |
| 162 | | $oModule=new $sModuleName($this); |
| 163 | | if ($bInit or $sModuleName=='Cache') { |
| 164 | | $oModule->Init(); |
| 165 | | $oModule->SetInit(); |
| | 196 | if (isset($this->aModules[$sModuleClass])) { |
| | 197 | /** |
| | 198 | * Получаем уже имеющийся объект модуля |
| | 199 | */ |
| | 200 | //if($bInit or $sModuleClass=='ModuleCache'){ |
| | 201 | if ($bInit) { |
| | 202 | $this->InitModule($oModule); |
| | 203 | } |
| | 204 | $oModule = &$this->aModules[$sModuleClass]; |
| | 205 | }else{ |
| | 206 | /** |
| | 207 | * Создаем объект модуля |
| | 208 | */ |
| | 209 | $oModule=new $sModuleClass($this); |
| | 210 | //if ($bInit or $sModuleClass=='ModuleCache') { |
| | 211 | if ($bInit) { |
| | 212 | $this->InitModule($oModule); |
| | 213 | }else{ |
| | 214 | $this->aModules[$sModuleClass] = &$oModule; |
| | 215 | } |
| 397 | | return array($oModule,$sModuleName,$sMethod); |
| | 451 | return array(&$oModule,$sModuleName,$sMethod); |
| | 452 | } |
| | 453 | |
| | 454 | /** |
| | 455 | * Проверяем, инициализирован ли модуль |
| | 456 | * @param $sModuleName |
| | 457 | * @param $sPlugin |
| | 458 | */ |
| | 459 | public function isInit($sModuleName = null, $sPlugin = null){ |
| | 460 | if(!$sModuleName){ |
| | 461 | return false; |
| | 462 | } |
| | 463 | if(preg_match('#^(Module|Plugin)#i', $sModuleName)){ |
| | 464 | $sClassName = $sModuleName; |
| | 465 | }else{ |
| | 466 | $sClassName = $sPlugin |
| | 467 | ? 'Plugin'.ucfirst($sPlugin).'_'.ucfirst($sModuleName) |
| | 468 | : ucfirst($sModuleName) |
| | 469 | ; |
| | 470 | } |
| | 471 | $aModule = $this->GetModule($sClassName.'_x', false); |
| | 472 | if($aModule){ |
| | 473 | return (bool) $aModule[0]->isInit(); |
| | 474 | } |
| | 475 | return false; |