1. [代码][PHP] 代码
- <?php
- class iSmarty
- {
- /*
- * The name of the directory where templates are located.
- * @var string
- */
- var $templatedir = '/';
- /*
- * The directory where compiled templates are located.
- * @var string
- */
- var $compiledir = 'test/';
- /*
- * where assigned template vars are kept
- * @var array
- */
- var $vars = array();
- /*
- * compile a resource
- * sets PHP tag to the compiled source
- * @param string $tpl (template file)
- */
- function parse($tpl)
- {
- // load template file //
- $fp = @fopen($tpl, 'r');
- $text = fread($fp, filesize($tpl));
- fclose($fp);
- // repalce template tag to PHP tag //
- $text = str_replace('{/if}', '', $text);
- $text = str_replace('{/loop}', '<?php } ?-->', $text);
- $text = str_replace('{foreachelse}', '<?php } else {?-->', $text);
- $text = str_replace('{/foreach}', '<?php } ?-->', $text);
- $text = str_replace('{else}', '<?php } else {?-->', $text);
- $text = str_replace('{loopelse}', '<?php } else {?-->', $text);
- // template pattern tags //
- $pattern = array(
- '/\$(\w*[a-zA-Z0-9_])/',
- '/\$this\-\>vars\[\'(\w*[a-zA-Z0-9_])\'\]+\.(\w*[a-zA-Z0-9])/',
- '/\{include file=(\"|\'|)(\w*[a-zA-Z0-9_\.][a-zA-Z]\w*)(\"|\'|)\}/',
- '/\{\$this\-\>vars(\[\'(\w*[a-zA-Z0-9_])\'\])(\[\'(\w*[a-zA-Z0-9_])\'\])?\}/',
- '/\{if (.*?)\}/',
- '/\{elseif (.*?)\}/',
- '/\{loop \$(.*) as (\w*[a-zA-Z0-9_])\}/',
- '/\{foreach \$(.*) (\w*[a-zA-Z0-9_])\=\>(\w*[a-zA-Z0-9_])\}/'
- );
- // replacement PHP tags //
- $replacement = array(
- '$this->vars[\'\1\']',
- '$this->vars[\'\1\'][\'\2\']',
- '<?php $this--->display(\'\2\')?>',
- '<?php echo \$this--->vars\1\3?>',
- '<?php if(\1) {?-->',
- '<?php } elseif(\1) {?-->',
- '<?php if (count((array)\$\1)) foreach((array)\$\1 as \$this--->vars[\'\2\']) {?>',
- '<?php if (count((array)\$\1)) foreach((array)\$\1 as \$this--->vars[\'\2\']=>$this->vars[\'\3\']) {?>'
- );
- // repalce template tags to PHP tags //
- $text = preg_replace($pattern, $replacement, $text);
- // create compile file //
- $compliefile = $this->compiledir . basename($tpl) . '.php';
- if ($fp = @fopen($compliefile, 'w')) {
- fputs($fp, $text);
- fclose($fp);
- }
- }
- /*
- * assigns values to template variables
- * @param array|string $k the template variable name(s)
- * @param mixed $v the value to assign
- */
- function assign($k, $v = null)
- {
- $this->vars[$k] = $v;
- }
- /*
- * ste directory where templates are located
- * @param string $str (path)
- */
- function templateDir($path)
- {
- $this->templatedir = $this->pathCheck($path);
- }
- /*
- * set where compiled templates are located
- * @param string $str (path)
- */
- function compileDir($path)
- {
- $this->compiledir = $this->pathCheck($path);
- }
- /*
- * check the path last character
- * @param string $str (path)
- * @return string
- */
- function pathCheck($str)
- {
- return (preg_match('/\/$/', $str)) ? $str : $str . '/';
- }
- /*
- * executes & displays the template results
- * @param string $tpl (template file)
- */
- function display($tpl)
- {
- $tplfile = $this->templatedir . $tpl;
- if (!file_exists($tplfile)) {
- exit('can not load template file :' . $tplfile);
- }
- $compliefile = $this->compiledir . $tpl . '.php';
- if (!file_exists($compliefile) || filemtime($tplfile)> filemtime($compliefile)) {
- $this->parse($tplfile);
- }
- include_once($compliefile);
- }
- }
- ?>
2. [代码][PHP] 代码
- <?php
- include 'iSmarty.php';
- $tpl = new iSmarty();
- $tpl--->assign('title','标题');
- $tpl->assign('Name','名字');
- $contact = array('1'=>'张一','2'=>'zhang2');
- $tpl->assign('contact',$contact);
- $tpl->display('test.html');
- ?>
3. [代码][PHP] 代码
- {$title} - {$Name}
- {foreach $contact key=>val}
- {$key}: {$val}
- {/foreach}
4. [文件] test.zip
test.zip
来源: https://www.php1.cn/detail/php-cd5c25ae34.html