/** * 构造方法 * * 用于初始化运行环境,或对基本变量进行赋值 * * @access public * @return boolean */ public function __construct() { //获取默认的语言包目录的路径 $moduleName = Doit::getModuleName(); $this->_langPath = BASE_PATH . (!$moduleName ? 'language' : 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'language') . DIRECTORY_SEPARATOR; return true; }
/** * Widget的前函数(类方法) * * @access protected * @return boolean */ protected function init() { //获取当前视图的目录(当视图文件的格式为PHP时) if (VIEW_EXT == Configure::PHP_VIEW_EXT) { //获取当前的模块名称 $moduleName = Doit::getModuleName(); //获取Widget文件目录路径 if (!$moduleName) { $widgetPath = BASE_PATH . 'widgets' . DIRECTORY_SEPARATOR; } else { $widgetPath = BASE_PATH . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR; } $this->_viewPath = $widgetPath . 'views' . DIRECTORY_SEPARATOR; } return true; }
/** * 构造方法(函数) * * 用于初始化程序运行环境,或对基本变量进行赋值 * * @access public * @return boolean */ public function __construct() { //获取当前的模块名称 $moduleName = Doit::getModuleName(); //获取Widget文件目录路径 if (!$moduleName) { $widgetPath = BASE_PATH . 'widgets' . DIRECTORY_SEPARATOR; } else { $widgetPath = BASE_PATH . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR; } //设置挂件视图模板目录的路径 $this->_viewPath = $widgetPath . 'views' . DIRECTORY_SEPARATOR; //设置视图编译缓存文件的默认目录路径 $this->_compilePath = CACHE_PATH . 'views' . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR; return true; }
/** * 写入日志 * * @access public * * @param string $message 所要写入的日志内容 * @param string $level 日志类型. 参数:Warning, Error, Notice * @param string $logFileName 日志文件名 * * @return boolean */ public static function write($message, $level = 'Error', $logFileName = null) { //参数分析 if (!$message) { return false; } //当日志写入功能关闭时 if (Configure::get('application.log') === false) { return true; } $logFilePath = self::_getLogFilePath($logFileName); //分析日志文件存放目录 $logDir = dirname($logFilePath); if (!is_dir($logDir)) { mkdir($logDir, 0777, true); } //分析记录日志的当前页面 $moduleId = Doit::getModuleName(); $controllerId = (!$moduleId ? '' : $moduleId . '::') . Doit::getControllerName(); $actionId = Doit::getActionName(); //分析日志内容 $message = "[{$controllerId}][{$actionId}]:" . $message; return error_log(date('[Y-m-d H:i:s]') . " {$level}: {$message} IP: {$_SERVER['REMOTE_ADDR']}\n", 3, $logFilePath); }
/** * 获取生成的文件的路径 * * @access protected * * @param string $fileName 文件名 * * @return string */ protected function _getFilePath($fileName = null) { //参数分析 if (!$fileName) { $fileName = Doit::getActionName(); } $moduleName = Doit::getModuleName(); return $this->_htmlPath . (!$moduleName ? '' : $moduleName . DIRECTORY_SEPARATOR) . Doit::getControllerName() . DIRECTORY_SEPARATOR . $fileName . '.html'; }
/** * 分析视图缓存文件名 * * @access protected * * @param string $cacheId 视图文件的缓存ID * * @return string */ protected function _parseCacheFile($cacheId) { return CACHE_PATH . 'htmls' . DIRECTORY_SEPARATOR . (!Doit::getModuleName() ? '' : Doit::getModuleName() . DIRECTORY_SEPARATOR) . Doit::getControllerName() . DIRECTORY_SEPARATOR . md5($cacheId) . '.action.html'; }
/** * 自动加载自定义类文件 * * @access private * * @param string $className 所需要加载的类的名称,注:不含后缀名 * @param boolean $supportModule 是否支持模块(Module)文件的自动加载 (true:支持/false:不支持) * * @return void */ private static function _loadLibrary($className, $supportModule = true) { //定义所要加载的文件是否在模块(Module)目录中。(true:在/false:不在) $isModule = false; //当支持模块(Module)文件自动加载开关开启时 if ($supportModule) { //获取当前所运行的模块(Module) $moduleName = Doit::getModuleName(); //获取library文件目录路径 if (!$moduleName) { $libraryHomePath = BASE_PATH . 'library' . DIRECTORY_SEPARATOR; } else { $libraryHomePath = BASE_PATH . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR; //重定义所要加载的文件是否在模块(Module)目录中 $isModule = true; } } else { //获取library文件目录路径 $libraryHomePath = BASE_PATH . 'library' . DIRECTORY_SEPARATOR; } //分析library文件的实际路径 $libraryFilePath = self::_parseFilePath($libraryHomePath, $className); //当library文件在library根目录中存在时 if (!is_file($libraryFilePath)) { //当模块(Module)中Model目录不存在所要加载的Model文件时,对application中Model目录进行分析并加载Model文件 if ($isModule) { return self::_loadLibrary($className, false); } //当所要加载的library文件不存在时 return false; } //加载library类文件 Doit::loadFile($libraryFilePath); return true; }
/** * 静态加载文件 * * 相当于inclue_once()。注:如果在模块的Controller文件中调用本模块的文件,可使用#_SELF_PATH代表本模块的根目录路径。 * * @example * 例一: * $this->import('snoopy.php'); * * 例二: * $this->import(BASE_PATH . 'extensions/editer/fck.php'); * * 例三:加载本模块(Module)中的文件 * $this->import('#_SELF_PATH/phpexcel/phpexcel.php'); * * 例四:在模块(Module)的Controller代码中加载application的library目录里的文件:snoopy.php * $this->import('snoopy.php', false); * * @access public * * @param string $fileName 所要加载的文件。注:默认目录为application的子目录:library * @param boolean $supportModule 是否支持模块(Module)文件的加载 (true:支持/false:不支持) * * @return void */ public static function import($fileName, $supportModule = true) { //参数分析 if (!$fileName) { return false; } //替换当前的模块(Module)根目录的路径 if ($supportModule) { $moduleName = Doit::getModuleName(); //当调用本函数(类方法)的代码为模块(Module)文件时 if ($moduleName) { $modulePath = BASE_PATH . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR; $fileName = str_replace('#_SELF_PATH', $modulePath, $fileName); } else { $fileName = str_replace('#_SELF_PATH', '', $fileName); } } //统一路径分隔符 $fileName = str_replace('\\', '/', $fileName); //当所要加载的文件具有详细的路径时 if (strpos($fileName, '/') !== false) { //分析获取文件的路径 $filePath = realpath($fileName); } else { //当支持模块开关开启时 if (!$supportModule) { //分析获取文件的路径 $filePath = realpath(BASE_PATH . 'library' . DIRECTORY_SEPARATOR . $fileName); } else { //分析获取文件的路径 $filePath = !$moduleName ? realpath(BASE_PATH . 'library' . DIRECTORY_SEPARATOR . $fileName) : realpath($modulePath . $fileName); } } return Doit::loadFile($filePath); }