快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

生成smarttemplate模板处理程序框架

<?php
/**
* 生成smarttemplate模板处理程序框架
*
* smarttemplate 模板类具有极高的工作效率,代码尺寸很小。
* 他的可扩展模板函数更是有独到之处。
*
* 尽管只有不多的几个方式,使用起来也很简朴。
* 但是在多此调整模板文件以后,要使处理程序与模板对应起来可是要花些工夫了。

* 本程序用于分析模板文件、并给出模板处理程序的框架
**/

ob_start();

$Template_name = "include/main.html";
$str = file_get_contents($Template_name);
preg_match_all("/<!--.*-->|{/w.*}/U",$str,$regs);

$stack = array();
$vars = array();
$functions = array();
$key = 0; // = chr(ord("i")+count($stack));
$LF = "/r/n";
$outstr = "";
foreach($regs[0] as $v) {
if(preg_match_all("/<!-- BEGIN (/w+) -->/",$v, $r)) {
array_push($stack,$r[1][0]);
$k = chr(ord("i")+$key++);
$outstr .= str_repeat(chr(9), $key-1)."/* 对数组 /${$r[1][0]} 赋值 */$LF";
$outstr .= str_repeat(chr(9), $key-1)."for(/$$k=0;/$$k<1;/$$k++) /{$LF";
}elseif(preg_match_all("/<!-- END (/w+) -->/",$v, $r)) {
$v = array_pop($stack);
$outstr .= str_repeat(chr(9), --$key)."}$LF";
if($key) {
$k = chr(ord("i")+$key-1);
$p = $stack[$key-1];
$outstr .= str_repeat(chr(9), $key)."/${$p}[/$$k][$v] = /$$v;$LF";
}else
$outstr .= "/$data[$v] = /$$v;$LF";
}elseif(preg_match_all("/{(/w+)}/",$v, $r)) {
if(count($stack)) {
$v = $stack[$key-1];
$k = chr(ord("i")+$key-1);
$outstr .= str_repeat(chr(9), count($stack))."/${$v}[/$$k][{$r[1][0]}] = \\\'{$r[1][0]}测试\\\';$LF";
$ch = "/$data[".join("][][",$stack)."][{$r[1][0]}]";
if(! in_array($ch, $vars))
$vars[] = $ch;
}else
if(! in_array("/$data[{$r[1][0]}]", $vars)) {
$vars[] = "/$data[{$r[1][0]}]";
$outstr .= "/$data[{$r[1][0]}] = \\\'{$r[1][0]}测试\\\';$LF";
}
}elseif(preg_match_all("/{(/w+):([^}]+)/",$v, $r)) {
$ch = $r[1][0]."({$r[2][0]})";
$define = true;
if(! @include("smarttemplate_extensions/smarttemplate_extension_serverr.php"))
$define = false;
$functions[] = array(name=>$ch, define=>$define);
foreach(split(",",$r[2][0]) as $v)
if($v[0] != \\\'"\\\')
if(! in_array($v, $vars)) {
$vars[] = "/$data[$v]";
$outstr .= "/$data[$v] = \\\'$v测试\\\';$LF";
}
}elseif(preg_match_all("/<!-- IF (/w+)/",$v, $r)) {
if(! in_array("/$data[{$r[1][0]}]", $vars)) {
$vars[] = "/$data[{$r[1][0]}]";
$outstr .= "/$data[{$r[1][0]}] = \\\'{$r[1][0]}测试\\\';$LF";
}
}
}

echo <<< TEXT
<?php
/**
* 模板 $Template_name
* 使用了如下变量,请对其赋值

TEXT;

foreach($vars as $v)
echo " * $v$LF";

echo " *$LF";
echo " * 使用了如下模板函数$LF";
$ar = array();
foreach($functions as $k=>$v) {
echo " * $v[name]$LF";
if(! $v[define]) $ar[] = $k;
}
if(count($ar)) {
$path = "smarttemplate_extensions";
if(! is_dir($path)) {
mkdir($path,0666);
chmod($path,0666);
}
echo " *$LF";
echo " * 其中以下函数未定义,请定义$LF";
foreach($ar as $k) {
$v = $functions[$k][name];
$name = preg_replace("/(/w+).*/","//1",$v);
echo " * $v => $path/{$path}_$name.php$LF";

$fp = fopen("$path/{$path}_$name.php","w");
fwrite($fp,"<?php$LF");
fwrite($fp,"function {$path}_$v /{$LF");
fwrite($fp," return \\\'函数$v\\\';$LF");
fwrite($fp,"}$LF?>$LF");
fclose($fp);
}
}
echo <<< TEXT
**/

/** 对模板变量赋值的可能形式 **/

TEXT;
echo $outstr;
echo <<< TEXT

/** 加载并执行模板 **/
require_once "class.smarttemplate.php";
/$page = new SmartTemplate("$Template_name");
/$page->assign(/$data);
/$page->output();
?>

TEXT;

$code = ob_get_contents();
ob_end_clean();

$fname = basename($Template_name);
$fname = substr($fname,0,strrpos($fname,".")+1)."php";

$fp = fopen($fname,"w");
fwrite($fp,$code);
fclose($fp);

include "$fname";

?>





返回类别: 教程
上一教程: 转贴:开发大型PHP项目的方式(五)
下一教程: 介绍几个array库的新函数

您可以阅读与"生成smarttemplate模板处理程序框架"相关的教程:
· 新作模板处理类,有爱好的可以试试
· 人大复印资料处理程序_补充篇
· PHP中轻型模板处理类:Smarty-Light
· 强烈推荐! 静态新闻列表自动生成程序
· 图书治理程序(一)
    微笑服务 优质保证 索取样品