/** * Выполнение всех обработчиков события * @param string $moduleName * @param string $eventName * @param array $arParams */ public static function run($moduleName, $eventName, &$arParams = array()) { if (empty(self::$_arEvents[$moduleName][$eventName])) { return false; } foreach (self::$_arEvents[$moduleName][$eventName] as &$event) { $callable_name = ""; if (!is_callable($event, false, $callable_name)) { if (is_array($event) && count($event) == 2) { fixNamespaceName($event[0]); } elseif (is_string($event)) { fixNamespaceName($event); } if (!is_callable($event, false, $callable_name)) { continue; } } call_user_func($event, &$arParams); } }
/** * предопределять переменную self::$classesPaths * Пример использования. * CModules::addAutoloadClasses( * "catalog", * array( * "SomeClass1" => "lib/fileWithSomeClasses.php", * "SomeClass1" => "lib/fileWithSomeClasses.php", * ) * ); * Пути попадают сразу в self::$classesPaths, * /!\ при чем перезаписывая те значения, * которые были сформированы автоматически ф-ией self::includeLibFiles() */ public static function setAutoloadClasses($moduleID, $arClassesFiles, $argDirectLoadClasses = self::global_set, $debug = self::global_set) { if (!self::$bInit) { return false; } if ($debug === self::global_set) { $debug = self::$debugMe; } $dctLoadSetSrc = ""; if ($argDirectLoadClasses === self::global_set) { $argDirectLoadClasses = (bool) self::$directLoadClasses; $dctLoadSetSrc = "global set"; } else { $argDirectLoadClasses = (bool) $argDirectLoadClasses; $dctLoadSetSrc = "argument set"; } $moduleID = strtolower($moduleID); if (strlen($moduleID) == 0) { if ($debug) { echo 'Module name not set. Class-files path is "' . DOC_ROOT . '".' . endl; } $CurentModulePath = DOC_ROOT; } elseif (is_dir(MODULES_PATH_FULL . "/" . $moduleID)) { $CurentModulePath = MODULES_PATH_FULL . "/" . $moduleID; } else { if ($debug) { echo 'Module name "' . $moduleID . '" is incorrect.' . endl; } return false; } if ($debug) { echo '<b>CALL Modules::setAutoloadClasses(' . ($moduleID ? $moduleID : 'false') . ',...)</b>' . endl; } foreach ($arClassesFiles as $className => $arClassFileNameModRelated) { if (file_exists($CurentModulePath . "/" . $arClassFileNameModRelated)) { fixNamespaceName($className); if (!class_exists($className, false)) { if ($debug) { echo "Class not loaded yet. Adding to autoload list: <u>{$className}</u>" . endl; } self::$classesPaths[$className] = $CurentModulePath . "/" . $arClassFileNameModRelated; if ($argDirectLoadClasses) { if ($debug) { echo "Direct loading class({$dctLoadSetSrc}): {$className} - " . self::$classesPaths[$className] . endl; } include_once self::$classesPaths[$className]; } } } else { if ($debug) { echo "File with class <u>{$className}</u> not found: " . $CurentModulePath . "/" . $arClassFileNameModRelated . endl; } } } //sort(self::$classesPaths); }