목차
[PHP]代码 
php教程 PHP源码 php超实用的模板引擎

php超实用的模板引擎

May 25, 2016 pm 05:13 PM
php

方法: 

$this->assign('style',$style);//变量
$this->display();//模板 
<?php
/*配制*/
$config=array(
/* 数据库设置 */
'DB_TYPE'               => 'mysql',     // 数据库类型
'DB_HOST'               => 'localhost', // 服务器地址
'DB_NAME'               => 'php',          // 数据库名
'DB_USER'               => 'root',      // 用户名
'DB_PWD'                => '123',          // 密码
'DB_PREFIX'             => 'jiaodu_',    // 数据库表前缀
'DB_CHARSET'            => 'utf8',      // 数据库编码默认采用utf8
/* SESSION设置 */
'SESSION_START'  => 'user',    //session方式,文件方式:file, 数据库设置为user
/* 模板引擎设置 */
'TMPL_ADMIN_PATH'  =>'admin',//后台目录名称
'TMPL_COMPILE_PATH'  =>'/Runtime',//读写目录
'TMPL_PATH'  =>'/template',//模板路径
'TMPL_TEMPLATE_SUFFIX'  => 'html',     // 默认模板文件后缀
'TMPL_L_DELIM'          => '{',  // 模板引擎普通标签开始标记
'TMPL_R_DELIM'          => '}',  // 模板引擎普通标签结束标记
'TMPL_STRIP_SPACE'      => true,       // 是否去除模板文件里面的html空格与换行
'TMPL_CACHE_ON'  => true,        // 是否开启模板编译缓存,设为false则每次都会重新编译,一般用于模板调试
/* URL设置 */
'URL_HTML_SUFFIX'       => 'html',  // URL伪静态后缀设置
'URL_PATHINFO_MODEL'    => 2,       // URL模式,1不隐藏、2隐藏入口文件[需要规则支持]
/*其它设置*/
'PASS_ENCRYPT'  =>'www.php.cn',//加密因子
);
로그인 후 복사

[PHP]代码

<?php
/**
 * 模板解析类
 * @author 角度 QQ:1286522207
 *
 */
class template extends Action{
	private $config;
	private $CompileDir;//编译目录
	private $templateDir;//模板目录
	private $templateFile;
	private $debuy=1;//是否调试
	private $assign;//变量
	public function __construct($templateFile){
		$this->config();
		$this->templateFile=$templateFile;
	}
	private function config(){
		global $config;
		$this->config=$config;
		$this->CompileDir=$this->config['TMPL_COMPILE_PATH'].'/Compile';
		$this->templateDir=$this->config['TMPL_PATH'];
		$this->debuy=$this->config['TMPL_CACHE_ON'];

	}

	/**
	 * 检查编译目录
	 */
	public function is_CompileDir(){
		$dir=APP_PATH.$this->CompileDir;
		if (!is_dir($dir)){
			if (!mkdir($dir)){
				die('编译目录自动创建失败,请手动创建');
			}
		}
		if (!is_writeable($dir)){
			die('编译目录没有写入权');
		}
	}
	/**
	 * 注入变量
	 */
	public function assign($assign) {
		$this->assign=$assign;
	}
	/**
	 * 输出模板
	 */
	public function display(){
		$this->is_CompileDir();
		$this->CompileCheck();
	}
	/**
	 * 检查编译
	 */
	private  function CompileCheck(){
		$this->is_CompileDir();
		$filename=APP_PATH.$this->CompileDir.'/'.md5($this->templateFile).'.php';
		if ($this->debuy || !is_file($filename)){
			$this->tmplstrtpspace($filename);
		}
		foreach ($this->assign as $key=>$row){
			$$key=$row;
		}
		include $filename;
	}
	/**
	 * 格式化模板并写入编译
	 */
	private  function tmplstrtpspace($filename){
		if ($this->config['TMPL_STRIP_SPACE']){
			$find     = array("~>\s+<~","~>(\s+\n|\r)~");
			$replace  = array("><",">");
			$tmplContent = preg_replace($find, $replace,$this->templateCheck());
		}else {
			$tmplContent = $this->templateCheck();
		}
		if (file_put_contents($filename,trim($tmplContent))){
			return true;
		}else {
			die('编译写入失败');
		}
	}
	/**
	 * 检查模板
	 */
	private  function templateCheck(){
		$PATH=APP_PATH.$this->templateDir.'/'.$this->templateFile.'.html';
		if (is_file($PATH)){
			return $this->template_compile(file_get_contents ( $PATH ));
		}else {
			die('模板:'.$this->templateFile.'.html 不存在');
		}
	}
	/**
	 * 编译模板
	 */
	private function template_compile($template_Conver){
		if (empty($template_Conver)){
			return $template_Conver;
		}else {
			$_Left= $this->config['TMPL_L_DELIM'];
			$_Right= $this->config['TMPL_R_DELIM'];
			$template_Preg [] = '/<\?(=|php|)(.+?)\?>/is';
			$template_Preg [] = '/' . $_Left . '(else if|elseif) (.*?)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . 'for (.*?)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . 'while (.*?)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . '(loop|foreach) (.*?)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . 'if (.*?)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . 'else' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . "(eval|_)( |[\r\n])(.*?)" . $_Right . '/is';
			$template_Preg [] = '/' . $_Left . '_e (.*?)' . $_Right . '/is';
			$template_Preg [] = '/' . $_Left . '_p (.*?)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . '\/(if|for|loop|foreach|eval|while)' . $_Right . '/i';
			$template_Preg [] = '/' . $_Left . '((( *(\+\+|--) *)*?(([_a-zA-Z][\w]*\(.*?\))|\$((\w+)((\[|\()(\'|")?\$*\w*(\'|")?(\)|\]))*((->)?\$?(\w*)(\((\'|")?(.*?)(\'|")?\)|))){0,})( *\.?[^ \.]*? *)*?){1,})' . $_Right . '/i';
			$template_Preg [] = "/(	| ){0,}(\r\n){1,}\";/";
			$template_Preg [] = '/' . $_Left . '(\#|\*)(.*?)(\#|\*)' . $_Right . '/';
			$template_Preg [] = '/' . $_Left . '\%([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)' . $_Right . '/';
			$template_Replace [] = '<?\\1\\2?>';
			$template_Replace [] = '<?php }else if (\\2){ ?>';
			$template_Replace [] = '<?php for (\\1) { ?>';
			$template_Replace [] = '<?php while (\\1) { ?>';
			$template_Replace [] = '<?php foreach ((array)\\2) { $__i++; ?>';
			$template_Replace [] = '<?php if (\\1){ ?>';
			$template_Replace [] = '<?php }else{ ?>';
			$template_Replace [] = '<?php \\3; ?>';
			$template_Replace [] = '<?php echo \\1; ?>';
			$template_Replace [] = '<?php print_r(\\1); ?>';
			$template_Replace [] = '<?php } ?>';
			$template_Replace [] = '<?php echo \\1;?>';
			$template_Replace [] = '';
			$template_Replace [] = '';
			$template_Replace [] = '<?php echo $this->lang_array[\'\\1\'];?>';
			return preg_replace ( $template_Preg, $template_Replace, $template_Conver );
		}
	}
}
로그인 후 복사

                   


                   

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

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP 빠른 가이드

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

See all articles