From d725819e2920e9f69b3fdd54fad337eaf80477ad Mon Sep 17 00:00:00 2001 From: zero Date: Mon, 28 Jan 2008 09:35:42 +0000 Subject: [PATCH] =?UTF-8?q?=EC=9C=84=EC=A0=AF=EC=BA=90=EC=8B=B1=20?= =?UTF-8?q?=ED=83=80=EC=9D=B4=EB=B0=8D=EC=9D=84=20=EC=A0=9C=EB=8C=80?= =?UTF-8?q?=EB=A1=9C=20=EC=9E=A1=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8D=98=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3609 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/widget/WidgetHandler.class.php | 77 +++++++++++++------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/classes/widget/WidgetHandler.class.php b/classes/widget/WidgetHandler.class.php index 8ef0e152f..1fe6a6f2d 100644 --- a/classes/widget/WidgetHandler.class.php +++ b/classes/widget/WidgetHandler.class.php @@ -12,32 +12,51 @@ /** * @brief 위젯 캐시 처리 **/ - function getCache($sequence, $cache) { - // 위젯 캐시는 캐시 번호와 캐시 시간이 없으면 캐시하지 않는 것으로 처리함 - if(!$sequence || !$cache) return; + function getCache($widget, $args) { - // 캐시 디렉토리가 없으면 생성하고 return - $cache_path = './files/cache/widget_cache/'; - if(!is_dir($cache_path)) { - FileHandler::makeDir($cache_path); - return; + // widget, 캐시 번호와 캐시값이 설정되어 있는지 확인 + $widget_sequence = $args->widget_sequence; + $widget_cache = $args->widget_cache; + + /** + * 캐시 번호와 캐시 값이 아예 없으면 바로 데이터를 추출해서 리턴 + **/ + if(!$widget_cache || !$widget_sequence) { + $oWidget = WidgetHandler::getObject($widget); + if(!$oWidget) return; + + return $oWidget->proc($args); } - // 캐시파일명을 구해서 해당 파일이 없으면 return - $cache_file = sprintf('%s%d.%s.cache', $cache_path, $sequence, Context::getLangType()); - if(!file_exists($cache_file)) return; + /** + * 캐시 번호와 캐시값이 설정되어 있으면 캐시 파일을 불러오도록 함 + **/ + + // 캐시 디렉토리가 없으면 생성 + $cache_path = './files/cache/widget_cache/'; + if(!is_dir($cache_path)) FileHandler::makeDir($cache_path); - $filemtime = filemtime($cache_file); + // 캐시파일명을 구함 + $cache_file = sprintf('%s%d.%s.cache', $cache_path, $widget_sequence, Context::getLangType()); - // 만약 캐시파일이 widgetHandler보다 이전에 생성된 파일이면 새로 캐시해야 함 - if($filemtime < filemtime('./classes/widget/WidgetHandler.class.php')) return; + // 캐시 파일이 존재하면 해당 파일의 유효성 검사 + if(file_exists($cache_file)) { + $filemtime = filemtime($cache_file); - // 캐시 파일의 수정일이 캐시시간보다 크면 새로 만들기 위해서 return - if($filemtime + $cache*60 < time()) return; + // 수정 시간을 비교해서 캐싱중이어야 하거나 WidgetHandler.class.php 파일보다 나중에 만들어 졌다면 캐시값을 return + if($filemtime + $widget_cache*60 > time() && $filemtime > filemtime('./classes/widget/WidgetHandler.class.php')) { + return FileHandler::readFile($cache_file); + } + } - // 캐시 파일 내용을 읽어서 return - $output = FileHandler::readFile($cache_file); - return $output; + // 캐시를 새로 해야 할 경우임 + $oWidget = WidgetHandler::getObject($widget); + if(!$oWidget) return; + + $widget_content = $oWidget->proc($args); + WidgetHandler::writeCache($widget_sequence, $widget_content); + + return $widget_content; } /** @@ -75,25 +94,7 @@ if(!is_dir(sprintf('./widgets/%s/',$widget))) return; // 위젯의 내용을 담을 변수 - $widget_content = ''; - - // 캐시된 코드가 있는지 확인 - $widget_sequence = $args->widget_sequence; - $widget_cache = $args->widget_cache; - if($widget_cache && $widget_sequence) $widget_content = WidgetHandler::getCache($widget_sequence, $widget_cache); - - // 캐시된 코드가 없을 경우 코드 생성 - if(!$widget_content) { - $oWidget = WidgetHandler::getObject($widget); - if(!$oWidget) return; - - $widget_content = $oWidget->proc($args); - - if(is_object($widget_content) && (is_a($widget_content, 'Object')||is_subclass_of($widget_content, 'Object'))) $widget_content = $widget_content->getMessage(); - } - - // 위젯의 캐시값과 위젯 sequence가 있을 경우 캐시 파일에 저장 - if($widget_cache && $widget_sequence) WidgetHandler::writeCache($widget_sequence, $widget_content); + $widget_content = WidgetHandler::getCache($widget, $args); } /**