/** * Find and load module * @param string $a_module * @return Zoombi_Module */ public final function module($a_module, $a_throw = false) { $mod_name = trim(strtolower($a_module)); if (isset($this->m_modules[$mod_name]) or array_key_exists($mod_name, $this->m_modules)) { return $this->m_modules[$mod_name]; } $this->emit(new Zoombi_Event($this, 'preModule', $mod_name)); $mod_dir = $this->getModule()->fromModuleDir($mod_name); if (!file_exists($mod_dir)) { if ($a_throw) { throw new Zoombi_Exception_Module('Module "' . $mod_name . '" not exist', Zoombi_Exception_Controller::EXC_LOAD); } } else { $module = false; try { $module = $this->_loadClass($mod_name, $this->m_modules, 'module', 'Zoombi_Module'); } catch (Zoombi_Exception_Loader $e) { if ($a_throw) { throw new Zoombi_Exception_Module($e->getMessage(), Zoombi_Exception_Module::EXC_LOAD); } $module = new Zoombi_Module($this->getModule(), $mod_name); $this->m_modules[$mod_name] = $module; } $module->initialize(); $module->setFlag('initialized'); $this->emit(new Zoombi_Event($this, 'postModule', $mod_name, $module)); return $module; } return false; }