html_process 클래스 싱글톤 적용 #206

This commit is contained in:
thisgun
2022-11-22 16:29:43 +09:00
parent 4c6b833f73
commit 62d0bf5c4e
2 changed files with 50 additions and 24 deletions

View File

@ -841,5 +841,3 @@ header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0 header('Pragma: no-cache'); // HTTP/1.0
run_event('common_header'); run_event('common_header');
$html_process = new html_process();

View File

@ -2511,37 +2511,61 @@ function get_skin_javascript($skin_path, $dir='')
return $str; return $str;
} }
if (!function_exists('get_called_class')) {
function get_called_class() {
$bt = debug_backtrace();
$lines = file($bt[1]['file']);
preg_match(
'/([a-zA-Z0-9\_]+)::'.$bt[1]['function'].'/',
$lines[$bt[1]['line']-1],
$matches
);
return $matches[1];
}
}
function get_html_process_cls() {
return html_process::getInstance();
}
// HTML 마지막 처리 // HTML 마지막 처리
function html_end() function html_end()
{ {
global $html_process; return get_html_process_cls()->run();
return $html_process->run();
} }
function add_stylesheet($stylesheet, $order=0) function add_stylesheet($stylesheet, $order=0)
{ {
global $html_process; if(trim($stylesheet))
get_html_process_cls()->merge_stylesheet($stylesheet, $order);
if(trim($stylesheet) && method_exists($html_process, 'merge_stylesheet') )
$html_process->merge_stylesheet($stylesheet, $order);
} }
function add_javascript($javascript, $order=0) function add_javascript($javascript, $order=0)
{ {
global $html_process; if(trim($javascript))
get_html_process_cls()->merge_javascript($javascript, $order);
if(trim($javascript) && method_exists($html_process, 'merge_javascript') )
$html_process->merge_javascript($javascript, $order);
} }
class html_process { class html_process {
protected $css = array(); protected static $id = '0';
protected $js = array(); private static $instances = array();
protected static $is_end = '0';
protected static $css = array();
protected static $js = array();
function merge_stylesheet($stylesheet, $order) public static function getInstance($id = '0')
{ {
$links = $this->css; self::$id = $id;
if (isset(self::$instances[self::$id])) {
return self::$instances[self::$id];
}
$calledClass = get_called_class();
return self::$instances[self::$id] = new $calledClass;
}
public static function merge_stylesheet($stylesheet, $order)
{
$links = self::$css;
$is_merge = true; $is_merge = true;
foreach($links as $link) { foreach($links as $link) {
@ -2552,12 +2576,12 @@ class html_process {
} }
if($is_merge) if($is_merge)
$this->css[] = array($order, $stylesheet); self::$css[] = array($order, $stylesheet);
} }
function merge_javascript($javascript, $order) public static function merge_javascript($javascript, $order)
{ {
$scripts = $this->js; $scripts = self::$js;
$is_merge = true; $is_merge = true;
foreach($scripts as $script) { foreach($scripts as $script) {
@ -2568,13 +2592,17 @@ class html_process {
} }
if($is_merge) if($is_merge)
$this->js[] = array($order, $javascript); self::$js[] = array($order, $javascript);
} }
function run() public static function run()
{ {
global $config, $g5, $member; global $config, $g5, $member;
if (self::$is_end) return; // 여러번 호출해도 한번만 실행되게 합니다.
self::$is_end = 1;
// 현재접속자 처리 // 현재접속자 처리
$tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' "; $tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
$tmp_row = sql_fetch($tmp_sql); $tmp_row = sql_fetch($tmp_sql);
@ -2599,7 +2627,7 @@ class html_process {
ob_end_clean(); ob_end_clean();
$stylesheet = ''; $stylesheet = '';
$links = $this->css; $links = self::$css;
if(!empty($links)) { if(!empty($links)) {
foreach ($links as $key => $row) { foreach ($links as $key => $row) {
@ -2623,7 +2651,7 @@ class html_process {
} }
$javascript = ''; $javascript = '';
$scripts = $this->js; $scripts = self::$js;
$php_eol = ''; $php_eol = '';
unset($order); unset($order);