코드 복사 코드는 다음과 같습니다.
/*template.class.php
@ Kangsheng Weibo 템플릿 추출 클래스 이 템플릿은 독립적으로 만들어 보는 것이 쉬운 것 같습니다.by 레이리진
@ ctt 템플릿을 살펴봤습니다. phpcms 템플릿과 비슷한가요? ? ^_^ 헤헤! ! !
@ Weibo http://weibo.com/lrjxgl
@ 다들 좋은 내용 공유해서 어렵게 추출했습니다. 궁금한 사항은 문의주세요
@ 기본 템플릿 파일은 .htm입니다
$tpl = 새 템플릿('skin',"default");
$tpl->objdir='tpp';
$tpl->rewrite=true;//다시 쓰기를 활성화하려면 서버 지원이 필요합니다.
$tpl-> ;rewrite_rule=array(array("/index.php/"),array("index.html")); //규칙 다시 작성
$tpl->ass("indexurl", "index.php") ;
$tpl->ass("str","나는 라라라 문자열입니다")
$tpl->ass("ec","나는 에코되었습니다. out");
$tpl->sign("subhtml","{subtpl ttt} 이것은 템플릿 파일을 소개하는 데 사용됩니다. 이것은 ttt.htm을 소개하는 것입니다.");
$tpl-> 할당("a ",array('dasdasd'.'bbbbbbbb','cccccccccccccc'))
$tpl->할당("i",1);
$tpl->display(" index");
*/
if(!definated("CHARSET")) Define("CHARSET","gb2312");//문자 인코딩
if(!defined("DIR_TPL")) Define("DIR_TPL ","tpl");//기본 템플릿 디렉터리
if(!definated("DIR_DATA")) Define("DIR_DATA","data");//기본 데이터 디렉터리
if( !definated(" DEBUG")) Define("DEBUG",0);//기본 실행 모드
class template {
//note var
public $rewrite=false;//의사 활성화 여부 -static rewrite
public $rewrite_rule=array(); //의사 정적 규칙 설정
public $defaulttpldir;//기본 템플릿
public $tpldir;//템플릿 디렉터리
public $objdir; //컴파일 캐시 디렉터리
public $tplfile;//템플릿 파일
public $objfile;//컴파일 파일
public $tplid=1;//템플릿 번호
public $currdir='default' ;//현재 스타일 디렉터리
public $vars=array();//변수 테이블 참고
public $removeblanks=false;//공백 제거
public $stdout='display';//출력 유형
함수 __construct ($tplid, $currdir) {
$this->template($tplid, $currdir)
}
함수 템플릿($tplid, $currdir) {
ob_start();
if(file_exists(DIR_TPL.'/'.$currdir)) {
$this->currdir = $currdir
$this->tplid
} else {
$this->currdir = 'default';
$this->tplid = 1
}
$this->defaulttpldir = DIR_TPL.'/default' ;
$ this->tpldir = DIR_TPL.'/'.$this->currdir
$this->objdir = DIR_DATA.'/cache/tpl'
if(version_compare( PHP_VERSION, '5' ) == -1) {
register_shutdown_function(array(&$this, '__destruct'))
}
}
//공개
함수 할당( $k, $v ) {
$this->vars[$k] = $v
}
//공개
함수 표시($file) {
extract( $this-> vars, EXTR_SKIP);
include $this->getObj($file)
}
function getObj($file, $tpldir = '') {
$subdir = ($pos = strpos($file, '/')) === false ? '' : substr($file, 0, $pos)
$file = $subdir($file, $pos) 1) : $file ;
$this->tplfile = ($tpldir ? $tpldir : $this->tpldir).'/'.($subdir ? $subdir.'/' : ''). $file.'.htm';
$this->objfile = $this->objdir.'/'.($tpldir ? '' : $this->tplid.'_') subdir ? $subdir.'_' : '').$file.'.php';
//기본 디렉토리 참고
if(@filemtime($this->tplfile) === FALSE)
$this ->tplfile = $this->defaulttpldir.'/'.($subdir ? $subdir.'/' : '').$file.'.htm';
}
//note 만료된 비교 여부
if(!file_exists($this->objfile) || DEBUG && @filemtime($this->objfile) < filemtime($this->tplfile)) {
$this ->compile();
}
return $this->objfile
}
function getTpl($file) {
$subdir = ($ pos = strpos($file , '/')) === false ? '' : substr($file, 0, $pos)
$file = $subdir($file, $pos 1): $file;
$tplfile = $this->tpldir.'/'.($subdir ? $subdir.'/' : '').$file.'.htm'
if(@filemtime ($tplfile) == = FALSE) {
$tplfile = $this->defaulttpldir.'/'.($subdir ? $subdir.'/' : '').$file.'.htm';
}
return $tplfile;
}
function compile() {
$var_regexp = "@?\$[a-zA-Z_]w*(?:[[w. "'[]$] ])*";
$vtag_regexp = "=(@?\$[a-zA-Z_]w*(?:[[w."'[]$] ] )*)?> ";
$const_regexp = "{([w] )}";
$template = file_get_contents($this->tplfile);
for($i = 1; $i <= 3 ; $i ) {
if(strpos($template, '{subtpl') !== FALSE) {
if(DEBUG == 2) {
$template = str_replace ('{subtpl', '{tpl', $template);
} else {
$template = preg_replace("/[nrt]*{subtpls ([a-z0-9_:/] )}[ nrt]*/ies" , "file_get_contents($this->getTpl('\1'))", $template);
}
}
}
$remove = array(
'/(^ |r|n)/*. ?(r|n)*/(r|n)/is',
'///참고. ?(r|n)/i',
'// /debug.?(r|n)/i',
'/(^|r|n)(s|t) /',
'/(r|n)/ ',
) ;
$this->removeblanks && $template = preg_replace($remove, '', $template)
$template = preg_replace("/