php+自定义打印模板下载,PHP的自定义模板引擎使用方法

PHP的自定义模板引擎使用方法

/**

内部使用的私有方法,使用正则表达式将模板文件''中的语句替换为对应的值或PHP代码

@param string $content 提供从模板文件中读入的全部内容字符串

@return $repContent   返回替换后的字符串

*/

private function tpl_replace($content) {

/* 将左右定界符号中,有影响正则的特殊符号转义 例如,转义\ */

$left = preg_quote($this->left_delimiter, '/');

$right = preg_quote($this->right_delimiter, '/');

/* 匹配模板中各种标识符的正则表达式的模式数组 */

$pattern = array(

/* 匹配模板中变量 ,例如,"" */

'/'.$left.'\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*'.$right.'/i',

/* 匹配模板中if标识符,例如 " " */

'/'.$left.'\s*if\s*(.+?)\s*'.$right.'(.+?)'.$left.'\s*\/if\s*'.$right.'/ies',

/* 匹配elseif标识符, 例如 "" */

'/'.$left.'\s*else\s*if\s*(.+?)\s*'.$right.'/ies',

/* 匹配else标识符, 例如 "" */

'/'.$left.'\s*else\s*'.$right.'/is',

/* 用来匹配模板中的loop标识符,用来遍历数组中的值, 例如 " " */

'/'.$left.'\s*loop\s+\$(\S+)\s+\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*'.$right.'(.+?)'.$left.'\s*\/loop\s*'.$right.'/is',

/* 用来遍历数组中的键和值,例如 " $value }> " */

'/'.$left.'\s*loop\s+\$(\S+)\s+\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*=>\s*\$(\S+)\s*'.$right.'(.+?)'.$left.'\s*\/loop \s*'.$right.'/is',

/* 匹配include标识符, 例如,'' */

'/'.$left.'\s*include\s+[\"\']?(.+?)[\"\']?\s*'.$right.'/ie'

);

/* 替换从模板中使用正则表达式匹配到的字符串数组 */

$replacement = array(

/* 替换模板中的变量 <?php echo $this->tpl_vars["var"]; */

'<?php echo $this->tpl_vars["${1}"]; ?>',

/* 替换模板中的if字符串 <?php if($col == "sex") { ?> <?php } ?> */

'$this->stripvtags(\'<?php if(${1}) { ?>\',\'${2}<?php } ?>\')',

/* 替换elseif的字符串 <?php } elseif($col == "sex") { ?> */

'$this->stripvtags(\'<?php } elseif(${1}) { ?>\',"")',

/* 替换else的字符串 <?php } else { ?> */

'<?php } else { ?>',

/* 以下两条用来替换模板中的loop标识符为foreach格式 */

'<?php foreach($this->tpl_vars["${1}"] as $this->tpl_vars["${2}"]) { ?>${3}<?php } ?>',

'<?php foreach($this->tpl_vars["${1}"] as $this->tpl_vars["${2}"] => $this->tpl_vars["${3}"]) { ?>${4}<?php } ?>',

/*替换include的字符串*/

'file_get_contents($this->template_dir."/${1}")'

);

/* 使用正则替换函数处理 */

$repContent = preg_replace($pattern, $replacement, $content);

/* 如果还有要替换的标识,递归调用自己再次替换 */

if(preg_match('/'.$left.'([^('.$right.')]{1,})'.$right.'/', $repContent)) {

$repContent = $this->tpl_replace($repContent);

}

/* 返回替换后的字符串 */

return $repContent;

}

/**

内部使用的私有方法,用来将条件语句中使用的变量替换为对应的值

@param string $expr  提供模板中条件语句的开始标记

@param string $statement 提供模板中条件语句的结束标记

@return strin    将处理后的条件语句相连后返回

*/

private function stripvtags($expr, $statement='') {

/* 匹配变量的正则 */

$var_pattern = '/\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*/is';

/* 将变量替换为值 */

$expr = preg_replace($var_pattern, '$this->tpl_vars["${1}"]', $expr);

/* 将开始标记中的引号转义替换 */

$expr = str_replace("\\\"", "\"", $expr);

/* 替换语句体和结束标记中的引号 */

$statement = str_replace("\\\"", "\"", $statement);

/* 将处理后的条件语句相连后返回 */

return $expr.$statement;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值