widuu模版引擎 超精简

widuu 2012-9-7 PHP技术 3,034 0 喜欢 (0)

widuusmarty类是模版引擎类

<?php
class WiduuSmarty
{
/*
* 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}', '<?php } ?>', $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);
}
}

?>

然后我们实列化这个类

<?php
include WiduuSmarty.php';
$tpl = new WiduuSmarty();
$tpl->assign('title','标题');
$tpl->assign('Name','名字');

$contact = array('1'=>'张一','2'=>'zhang2');
$tpl->assign('contact',$contact);
$tpl->display('test.html');

?>

最后写模版

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<DIV>{$title} - {$Name}</DIV>
{foreach $contact key=>val}
{$key}: {$val}<br>
{/foreach}
</body>
</html>

谢谢大家对微度网络的支持,欢迎转载-转载请注明来自微度网络http://www.widuu.com

转载请注明来自微度网络,本文标题:《widuu模版引擎 超精简》

喜欢 0 发布评论
Top