Table des matières
代码解释类似smart模版引擎原理
Jul 29, 2016 am 09:05 AM
gt
this
先贴下目录结构:
<code> ls compiled/ index.php source/ ss.class.PHP compiled 模版编辑后的目录 index.php source 模版源文件夹 ss.clsss.php 山寨类smarty文件夹 </code>
Copier après la connexion
<code>ss.clsss.php </code>
Copier après la connexion
<code><?php class Template{ private $templateDir;//源文件文件夹 private $compileDir;//编译之后文件夹 private $leftTag="{#";//需要替换的左边标记 private $rightTag="#}";//需要替换的左边标记 private $templateExtName=".html"; private $currentTemp;//当前正在编译的模版文件名 private $outputHtml;//正在读取的模版文件 private $varPool=array();//模版变量池 public function__construct($templateDir,$compileDir,$leftTag=null,$rightTag=null,$templateExtName=null){ $this->templateDir=$templateDir; $this->compileDir=$compileDir; if(!empty($leftTag))$this->leftTag=$leftTag; if(!empty($rightTag))$this->rightTag=$rightTag; if(!empty($templateExtName))$this->templateExtName=$templateExtName; } // 把用到的变量放入到变量池子中 public function assign($tag,$var){ $this->varPool[$tag]=$var; } // 取出一条变量,用于下面的str_replace正则替换 public function getVar($tag){ return $this->varPool[$tag]; } //获取模版源文件 public function getSourceTemplate($templateName){ $this->currentTemp=$templateName; // 拼接完整文件名 $sourceFileName=$this->templateDir.$this->currentTemp.$this->templateExtName; $this->outputHtml=file_get_contents($sourceFileName); } // 编译 public function compileTemplate($templateName=null){ // 获取当前需要编译的模版 $templateName=empty($templateName)?$this->currentTemp:$templateName; // $pattern='/\{#(\$[a-zA-Z_]\w+)#\}/';// 符合php变量命名 //preg_quote 可对用户界定的左右定界符中出现. \ + * ? [ ^ ] $ ( ) { } = ! | : -进行转义 $pattern="/".preg_quote($this->leftTag); //前后加上空格匹配任意次匹配类似<h1 id="name">{# $name #}</h1> $pattern.=' *\$([a-zA-Z_]\w*) *'; $pattern.=preg_quote($this->rightTag)."/"; $this->outputHtml=preg_replace($pattern, '<?php echo $this->getVar(\'$1\');?>', $this->outputHtml);// $1写成\\1也可以 // 注意不要用双引号,会解析getvar Template::$getVar报notice错误 $this->outputHtml=preg_replace($pattern, "<?php echo $this->getVar(\\1);?>", $this->outputHtml); $compileFileName=$this->compileDir.md5($templateName).$this->templateExtName; file_put_contents($compileFileName, $this->outputHtml); } // 输出 public function display($templateName=null){ $templateName=empty($templateName)?$this->currentTemp:$templateName; include($this->compileDir.md5($templateName).$this->templateExtName); } }</code>
Copier après la connexion
简单调用如下:(index.php
中内容)
<code><?php include('ss.class.php'); $basedir=str_replace('\\', '/', dirname(__FILE__));//兼容linux等区分大小写平台 $test=new Template($basedir."/source/",$basedir."/compiled/"); $test->assign('name','iamtb'); $test->assign('pageTitle','tbtbt'); $test->getSourceTemplate('index'); $test->compileTemplate('index'); $test->display('index'); </code>
Copier après la connexion
以上就介绍了代码解释类似smart模版引擎原理,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines
By DDD

Outils chauds Tags

Article chaud
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines
By DDD

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quelles sont les différences entre Huawei GT3 Pro et GT4 ?

Correctif : l'outil de capture ne fonctionne pas sous Windows 11

Comment réparer l'erreur Impossible de se connecter à l'App Store sur iPhone

Comment optimiser la durée de vie de la batterie de l'iPad avec iPadOS 17.4

Comment utiliser cette méthode en Java

Un article qui comprend ce point et rattrape 70% des front-end
