企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# smarty模版 下载<https://github.com/smarty-php/smarty/releases/> ## **smarty原理demo:** 例子1: 1.html ``` <pre class="calibre10">``` <span class="token1"><</span><span class="token1">!</span>DOCTYPE html<span class="token1">></span> <span class="token1"><</span>html lang<span class="token1">=</span><span class="token2">"en"</span><span class="token1">></span> <span class="token1"><</span>head<span class="token1">></span> <span class="token1"><</span>meta charset<span class="token1">=</span><span class="token2">"UTF-8"</span><span class="token1">></span> <span class="token1"><</span>title<span class="token1">></span>Document<span class="token1"><</span><span class="token1">/</span>title<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>head<span class="token1">></span> <span class="token1"><</span>body<span class="token1">></span> <span class="token1"><</span>h3<span class="token1">></span><span class="token3">{</span>$username<span class="token3">}</span><span class="token1"><</span><span class="token1">/</span>h3<span class="token1">></span> <span class="token1"><</span>h3<span class="token1">></span><span class="token3">{</span>$age<span class="token3">}</span><span class="token1"><</span><span class="token1">/</span>h3<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>body<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>html<span class="token1">></span> ``` ``` 1.php ``` <pre class="calibre10">``` <span class="token1"><</span><span class="token1">?</span>php <span class="token">// 将1.html页面的具有特殊标示符的变量提取出来,并进行替换操作</span> <span class="token">// 1.读取1.html文件的内容(将1.html的内容作为字符串读取出来)</span> $info <span class="token1">=</span> <span class="token4">file_get_contents</span><span class="token3">(</span><span class="token2">'1.html'</span><span class="token3">)</span><span class="token3">;</span><span class="token">//将html模板文件的内容读取出来</span> <span class="token">// echo $info;</span> <span class="token">// 2.替换操作{$username}即替换出加载1,html内容的{$username}</span> $preg <span class="token1">=</span> <span class="token2">'/\{\$[a-zA-Z_][a-zA-Z_0-9]*\}/'</span><span class="token3">;</span>匹配出<span class="token3">{</span>username<span class="token3">}</span>和<span class="token3">{</span>$age<span class="token3">}</span> $str <span class="token1">=</span> <span class="token4">preg_replace</span><span class="token3">(</span>$preg<span class="token3">,</span> <span class="token2">'zhangsan'</span><span class="token3">,</span> $info<span class="token3">)</span><span class="token3">;</span><span class="token">//将{username}和{$age}都替换成了zhangsan</span> echo $str<span class="token3">;</span> <span class="token1">?</span><span class="token1">></span> ``` ``` **例子2:** Engine.class.php ``` <pre class="calibre10">``` <span class="token">// 模板引擎</span> class <span class="token4">Engine</span> <span class="token3">{</span> <span class="token">// 定义存储数据的属性</span> private $fields<span class="token3">;</span> private $template_dir <span class="token1">=</span> <span class="token2">'templates/'</span><span class="token3">;</span> <span class="token">// 模板目录</span> private $compile_dir <span class="token1">=</span> <span class="token2">'compile/'</span><span class="token3">;</span> <span class="token">// 编译目录</span> private $cache_dir <span class="token1">=</span> <span class="token2">'cache/'</span><span class="token3">;</span> <span class="token">// 缓存目录</span> <span class="token">// 分配变量 如:$eng->assign('username','zhangsan'); </span> public <span class="token5">function</span> <span class="token4">assign</span><span class="token3">(</span>$key<span class="token3">,</span> $value<span class="token3">)</span> <span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span>fields<span class="token3">[</span>$key<span class="token3">]</span> <span class="token1">=</span> $value<span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 编译模板(template) * 将编译文件放置在compile目录下 * 将模板文件放置在templates目录下 */</span> public <span class="token5">function</span> <span class="token4">display</span><span class="token3">(</span>$tpl<span class="token3">)</span> <span class="token">//传入$tpl模板页的地址</span> <span class="token3">{</span> <span class="token">// 1.读取模板数据</span> $info <span class="token1">=</span> <span class="token4">file_get_contents</span><span class="token3">(</span>$this<span class="token1">-</span><span class="token1">></span>template_dir<span class="token3">.</span>$tpl<span class="token3">)</span><span class="token3">;</span><span class="token">//读取模板内容里面有准备替换的{$username} </span> <span class="token">// 2.数据替换操作preg_replace($patterns, $replace, $str);</span> $preg <span class="token1">=</span> <span class="token2">'/\{\$([a-zA-Z_][a-zA-Z_0-9]*)\}/'</span><span class="token3">;</span> <span class="token">//$preg可能会匹配很多[模版变量 ]他是一个数组{$username}</span> <span class="token">//echo preg_replace($preg,'\\1', $info); 替换成了username </span> $replace <span class="token1">=</span> <span class="token2">"<?php echo \$this->fields['\\1']; ?>"</span><span class="token3">;</span> <span class="token">// \\1 匹配出()里的内容即username</span> $str <span class="token1">=</span> <span class="token4">preg_replace</span><span class="token3">(</span>$preg<span class="token3">,</span>$replace<span class="token3">,</span> $info<span class="token3">)</span><span class="token3">;</span> <span class="token">//在$info里用$preg 匹配出的内容用$replace 替换掉上面替换成了<?php echo $this->fields['username']; ?></span> <span class="token">// //1表示获取()里的第一个分组内容</span> <span class="token">// echo $str;替换的内容是字符串不能当代码使用这时需要存入一个文件在加载进来就可以当代吗使用了;</span> <span class="token">// 3.将新替换的内容存储到新文件中</span> <span class="token4">file_put_contents</span><span class="token3">(</span>$this<span class="token1">-</span><span class="token1">></span>compile_dir<span class="token3">.</span>$tpl<span class="token3">,</span> $str<span class="token3">)</span><span class="token3">;</span> <span class="token">// 将生成的静态文件缓存下来</span> <span class="token4">ob_start</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 4.再将编译文件引入进来</span> include $this<span class="token1">-</span><span class="token1">></span>compile_dir<span class="token3">.</span>$tpl<span class="token3">;</span> <span class="token">// 获取缓存内容</span> $a <span class="token1">=</span> <span class="token4">ob_get_contents</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 将缓存的数据存入cache文件中</span> <span class="token4">file_put_contents</span><span class="token3">(</span>$this<span class="token1">-</span><span class="token1">></span>cache_dir<span class="token3">.</span>$tpl<span class="token3">,</span> $a<span class="token3">)</span><span class="token3">;</span> <span class="token">// 关闭缓存</span> <span class="token4">ob_end_flush</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> ``` ``` 1.php ``` <pre class="calibre10">``` <span class="token">// 1.引入模板引擎</span> include <span class="token2">'Engine.class.php'</span><span class="token3">;</span> <span class="token">// 2.实例化模板引擎</span> $eng <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Engine</span><span class="token3">;</span> <span class="token">// 3.分配变量</span> $eng<span class="token1">-</span><span class="token1">></span><span class="token4">assign</span><span class="token3">(</span><span class="token2">'username'</span><span class="token3">,</span><span class="token2">'zhangsan'</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 4.编译模板并输出</span> $eng<span class="token1">-</span><span class="token1">></span><span class="token4">display</span><span class="token3">(</span><span class="token2">'1.html'</span><span class="token3">)</span><span class="token3">;</span> ``` ``` ThinkPHP/Extend/Vendor/Smarty ThinkPHP\\Library\\Vendor\\Smarty templates/1.html //模板文件 ``` <pre class="calibre10">``` <span class="token1"><</span><span class="token1">!</span>DOCTYPE html<span class="token1">></span> <span class="token1"><</span>html lang<span class="token1">=</span><span class="token2">"en"</span><span class="token1">></span> <span class="token1"><</span>head<span class="token1">></span> <span class="token1"><</span>meta charset<span class="token1">=</span><span class="token2">"UTF-8"</span><span class="token1">></span> <span class="token1"><</span>title<span class="token1">></span>Document<span class="token1"><</span><span class="token1">/</span>title<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>head<span class="token1">></span> <span class="token1"><</span>body<span class="token1">></span> <span class="token1"><</span>h3<span class="token1">></span><span class="token3">{</span>$username<span class="token3">}</span><span class="token1"><</span><span class="token1">/</span>h3<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>body<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>html<span class="token1">></span> ``` ``` compile/1.html 编译文件 ``` <pre class="calibre10">``` <span class="token1"><</span><span class="token1">!</span>DOCTYPE html<span class="token1">></span> <span class="token1"><</span>html lang<span class="token1">=</span><span class="token2">"en"</span><span class="token1">></span> <span class="token1"><</span>head<span class="token1">></span> <span class="token1"><</span>meta charset<span class="token1">=</span><span class="token2">"UTF-8"</span><span class="token1">></span> <span class="token1"><</span>title<span class="token1">></span>Document<span class="token1"><</span><span class="token1">/</span>title<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>head<span class="token1">></span> <span class="token1"><</span>body<span class="token1">></span> <span class="token1"><</span>h3<span class="token1">></span><span class="token1"><</span><span class="token1">?</span>php echo $this<span class="token1">-</span><span class="token1">></span>fields<span class="token3">[</span><span class="token2">'username'</span><span class="token3">]</span><span class="token3">;</span> <span class="token1">?</span><span class="token1">></span><span class="token1"><</span><span class="token1">/</span>h3<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>body<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>html<span class="token1">></span> ``` ``` cache/1.html //缓存文件 ``` <pre class="calibre10">``` <span class="token1"><</span><span class="token1">!</span>DOCTYPE html<span class="token1">></span> <span class="token1"><</span>html lang<span class="token1">=</span><span class="token2">"en"</span><span class="token1">></span> <span class="token1"><</span>head<span class="token1">></span> <span class="token1"><</span>meta charset<span class="token1">=</span><span class="token2">"UTF-8"</span><span class="token1">></span> <span class="token1"><</span>title<span class="token1">></span>Document<span class="token1"><</span><span class="token1">/</span>title<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>head<span class="token1">></span> <span class="token1"><</span>body<span class="token1">></span> <span class="token1"><</span>h3<span class="token1">></span>zhangsan<span class="token1"><</span><span class="token1">/</span>h3<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>body<span class="token1">></span> <span class="token1"><</span><span class="token1">/</span>html<span class="token1">></span> ``` ``` preg\_replace用法: preg\_replace — 执行一个正则表达式的搜索和替换preg\_replace (要搜索的模式。可以使一个字符串或字符串数组, 用于替换的字符串或字符串数组, 要进行搜索和替换的字符串或字符串数组) ``` <pre class="calibre10">``` <span class="token1"><</span><span class="token1">?</span>php $patterns <span class="token1">=</span> array <span class="token3">(</span><span class="token2">'/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/'</span><span class="token3">,</span> <span class="token2">'/^\s*{(\w+)}\s*=/'</span><span class="token3">)</span><span class="token3">;</span> $replace <span class="token1">=</span> array <span class="token3">(</span><span class="token2">'\3/\4/\1\2'</span><span class="token3">,</span> <span class="token2">'$\1 ='</span><span class="token3">)</span><span class="token3">;</span> echo <span class="token4">preg_replace</span><span class="token3">(</span>$patterns<span class="token3">,</span> $replace<span class="token3">,</span> <span class="token2">'{startDate} = 1999-5-27'</span><span class="token3">)</span><span class="token3">;</span> ``` ``` 输出:$startDate = 5/27/1999 preg\_replace ($pattern ,$replacement ,$subject):用replacement替换掉 $pattern 匹配出来的$subject里的内容 如果$replacement是字符串 $pattern是数组那么所有的模式都使用replacement这个字符串进行替换 如果pattern和replacement 都是数组,每个pattern使用replacement中对应的 元素进行替换。如果replacement中的元素比pattern中的少, 多出来的pattern使用空字符串进行替换