PHP模板类
作者: 天行
模板类(改于phplib),没什么特别好的。主要是模板是纯HTML。方便美工和改。编程的时候稍复杂点。改后只有100行了。原来的1000多行(包括注释)
<?PHP
//From phplib,Power by phplib
class TEMPLATE
{
function TEMPLATE( $root = "." )
{
$this->root = $root;
}
function setFile( $varname, $filename = "" )
{
if ( substr( $filename, 0, 1 ) != "/" )
$filename = $this->root . "/" . $filename;
$this->file[$varname] = $filename;
if ( !file_exists( $filename ) )
exit( "文件: $filename 不存在" );
}
function set_block( $parent, $varname, $name = "" )
{
if ( !$this->loadfile( $parent ) )
exit( "设置循环: 不能加载 $parent." );
if ( !$name )
$name = $varname;
$str = $this->varvals[$parent];
$reg = "/[ \t]*<!--\s+BEGIN $varname\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $varname\s+-->\s*?\n?/sm";
preg_match_all( $reg, $str, $m );
$str = preg_replace( $reg, "{" . "$name}", $str );
$this->replace( $varname, $m[1][0] );
$this->replace( $parent, $str );
return true;
}
function replace( $varname, $value = "")
{
$this->varkeys[$varname] = "/" .preg_quote( "{" . $varname . "}" ) . "/";
$this->varvals[$varname] = $value;
}
function unreplace( $varname )
{
unset( $this->varkeys[$varname] );
unset( $this->varvals[$varname] );
}
function parse( $target, $varname, $append = false )
{
$varvals_quoted = array();
if ( !$this->loadfile( $varname ) )
exit( "不能加载 ".$varname );
reset( $this->varvals );
while ( list( $k, $v ) = each( $this->varvals ) )
$varvals_quoted[$k] = preg_replace( array( '/\\\\/', '/\$/' ), array( '\\\\\\\\', '\\\\$' ), $v );
$str = $this->varvals[$varname];
$str = preg_replace( $this->varkeys, $varvals_quoted, $str );
$append ? $this->replace($target,$this->varvals[$target].$str):$this->replace($target,$str);
return $str;
}
function pparse( $target, $varname, $append = false ,$isreplace=1)
{
$p = $this->parse( $target, $varname, $append );
$isreplace ? print preg_replace( '/{[^ \t\r\n}]+}/', "", $p ):print $p;
}
function loadfile( $varname )
{
if ( !isset( $this->file[$varname] ) || isset( $this->varvals[$varname] ) )
return true;
$str = @implode("", @file($this->file[$varname]));
if ( empty( $str ) )
exit( "加载文件: 加载 $varname, ".$this->file[$varname]." 不存在或者为空" );
$this->replace( $varname, $str );
return true;
}
function output( $varname )
{
print preg_replace( '/{[^ \t\r\n}]+}/', "", $this->varvals[$varname] );
exit();
}
function checked($value,$name)
{
$value ? $this->replace($name,'checked'):$this->replace($name,'');
}
function selected($value,$name)
{
!$value ? $this->replace($name,'selected'):$this->replace($name,'');
}
}
?>
//From phplib,Power by phplib
class TEMPLATE
{
function TEMPLATE( $root = "." )
{
$this->root = $root;
}
function setFile( $varname, $filename = "" )
{
if ( substr( $filename, 0, 1 ) != "/" )
$filename = $this->root . "/" . $filename;
$this->file[$varname] = $filename;
if ( !file_exists( $filename ) )
exit( "文件: $filename 不存在" );
}
function set_block( $parent, $varname, $name = "" )
{
if ( !$this->loadfile( $parent ) )
exit( "设置循环: 不能加载 $parent." );
if ( !$name )
$name = $varname;
$str = $this->varvals[$parent];
$reg = "/[ \t]*<!--\s+BEGIN $varname\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $varname\s+-->\s*?\n?/sm";
preg_match_all( $reg, $str, $m );
$str = preg_replace( $reg, "{" . "$name}", $str );
$this->replace( $varname, $m[1][0] );
$this->replace( $parent, $str );
return true;
}
function replace( $varname, $value = "")
{
$this->varkeys[$varname] = "/" .preg_quote( "{" . $varname . "}" ) . "/";
$this->varvals[$varname] = $value;
}
function unreplace( $varname )
{
unset( $this->varkeys[$varname] );
unset( $this->varvals[$varname] );
}
function parse( $target, $varname, $append = false )
{
$varvals_quoted = array();
if ( !$this->loadfile( $varname ) )
exit( "不能加载 ".$varname );
reset( $this->varvals );
while ( list( $k, $v ) = each( $this->varvals ) )
$varvals_quoted[$k] = preg_replace( array( '/\\\\/', '/\$/' ), array( '\\\\\\\\', '\\\\$' ), $v );
$str = $this->varvals[$varname];
$str = preg_replace( $this->varkeys, $varvals_quoted, $str );
$append ? $this->replace($target,$this->varvals[$target].$str):$this->replace($target,$str);
return $str;
}
function pparse( $target, $varname, $append = false ,$isreplace=1)
{
$p = $this->parse( $target, $varname, $append );
$isreplace ? print preg_replace( '/{[^ \t\r\n}]+}/', "", $p ):print $p;
}
function loadfile( $varname )
{
if ( !isset( $this->file[$varname] ) || isset( $this->varvals[$varname] ) )
return true;
$str = @implode("", @file($this->file[$varname]));
if ( empty( $str ) )
exit( "加载文件: 加载 $varname, ".$this->file[$varname]." 不存在或者为空" );
$this->replace( $varname, $str );
return true;
}
function output( $varname )
{
print preg_replace( '/{[^ \t\r\n}]+}/', "", $this->varvals[$varname] );
exit();
}
function checked($value,$name)
{
$value ? $this->replace($name,'checked'):$this->replace($name,'');
}
function selected($value,$name)
{
!$value ? $this->replace($name,'selected'):$this->replace($name,'');
}
}
?>
弱弱的问一句 能否给个实例. 菜鸟 不知如何下手