>백엔드 개발 >PHP 튜토리얼 >PHP 템플릿 함수 일반 구현 코드

PHP 템플릿 함수 일반 구현 코드

高洛峰
高洛峰원래의
2016-12-01 14:48:551140검색

phpcms와 discuz의 소스코드를 보았는데 혁신성이 부족한 부분이 있을 수 있습니다. 다만 원리는 대부분 동일하지만 세부적인 부분은 조금씩 다를 수 있습니다.
본론으로 들어가서 구체적인 구현 프로세스에 대해 이야기해 보겠습니다.
1. 우선 템플릿 파일을 어디에 넣을지 결정해야 겠죠? 변환된 php 파일은 어디에 넣어야 하나요? 그리고 이름은 어떻게 짓나요? 소스 코드로 직접 이동:
코드 복사 코드는 다음과 같습니다.
function template($tpl = 'index',$dir = 'hello')
{
if(!file_exists ($pd = TPL_PATH.$ dir.'/'))@mkdir($pd,0777) 또는 die("$pd 디렉토리 생성 실패");//예: 캐시/tpl/hello/
if(! file_exists($td = TPL.$ dir.'/'))@mkdir($td,0777) 또는 die("$td 디렉터리 생성 실패");//예: data/tpl/hello/

$t2p = $pd.$tpl .'.php';//cache/tpl/hello/index.php와 같은 템플릿 파일을 정기적으로 변환한 후 형성된 PHP 파일
$t2h = $td.$ tpl.'.html';//html 템플릿 파일(예: data/tpl/hello/index.html

2. 정규 변환은 언제 필요합니까? 정규화 후의 php 파일이 존재하지 않거나, 정규화 전의 html 파일이 변경되었을 수 있습니다. 여기서는 파일의 최신 수정 시간을 반환하는 filemtime(string $path) 함수가 사용됩니다.
코드 복사 코드는 다음과 같습니다.
if(!file_exists($t2p) || @filemtime($t2p) < @filemtime($t2h) )//템플릿 파일이 변경된 후 일반 그에 따라 php 파일이 업데이트됩니다.
{
template_go($t2p,$t2h);//템플릿 변환 시작
}
return $t2p;//정규화된 php 파일로 돌아갑니다. 다음과 같이 호출합니다: include template('header','hello');
}

3. 템플릿 변환을 시작하고 먼저 html 파일에서 읽은 다음 정규식으로 바꾸고 마지막으로 작성합니다. php 파일에.
코드 복사 코드는 다음과 같습니다.
function template_go($t2p,$t2h)
{
$str = @file_get_contents($t2h);//읽기
if($ str == = false) exit("템플릿 파일이 없습니다. 확인해주세요!")
$str = template_do($str);//정기 교체
@chmod($t2p,0777); 🎜>return $str = file_put_contents($t2p, $str);//Write
}

4. 일반 규칙, 비교적 간단한 일반 대체 구문 몇 가지.
코드 복사 코드는 다음과 같습니다.
function template_do($str)
{
$str = preg_replace('/([nr+])t+/s', '\1', $ str); //TAB 탭 문자를 제거합니다. 수정자 /s는 개행 문자를 무시하지 않습니다
$str = preg_replace('/{$(.*)}/Us', '', $str);/* {$xx}를 로 바꾸십시오. 수정자 /U를 추가해야 하며 한 번만 일치할 수 있습니다. 게으른 일치를 사용할 수도 있습니다 */
$str = preg_replace('/{php (.+)}/', '', $str);/*{php xxxx} 이 일반 규칙을 여러 번 수행할 때 줄 바꿈 문제를 고려해야 합니다.*/
$str = preg_replace('/{template(.*) )}/Us ', '', $str)
/*{template(xx,yy)}는 $str = preg_replace('/{include (.*)}/Us', '', $str);/* {include xx.php}는 */
$str = " ".$str ;
//$str = preg_replace('/s+/', ' ', $str);//
return $str;
을 보려면 웹페이지 소스 코드를 확인하세요.}

물론 이 기능은 아직은 상대적으로 초보적인 기능이므로 개선되길 기대합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 변수 범위 소개다음 기사:PHP 변수 범위 소개