phplib7.2中文汉化版及调用示例

发表于:2007-07-04来源:作者:点击数: 标签:
phplib7.2中文汉化版及调用示例 template.inc文件 PHP : ?php classTemplate { /* *SessionManagementforPHP3 *(C)Copyright1999-2000NetUSEGmbHKristianKoehntopp *$Id:template.inc,v1.52000/07/1218:22:35kkExp$ *汉化:Forest */ var$classname=Template;

phplib7.2中文汉化版及调用示例

template.inc文件

PHP:
<?php
    class Template
   {
     /*
      *Session Management for PHP3
      *(C) Copyright 1999-2000 NetUSE GmbH Kristian Koehntopp
      *$Id: template.inc,v1.5 2000/07/12 18:22:35 kk Exp $    
      *汉化:Forest
      */
    var $classname="Template";
    var $debug=false;
    var $filename=array();//包含了所有的模板文件名和模板名的数组
    var $root="";//$root为模板文件的存放目录
    var $varkeys=array();//存放文本元素的键名
    var $varvals=array();//存放文本元素的值
        
    var $unknowns="remove";//属性$unknowns设定了对未知内容的处理方法
    var $halt_on_error="yes";//设定是否在发生错误的时候停止
    
    var $last_error="";//记录最后一个错误信息
    
    /*********************************************************/
    //构造函数默认将模板文件目录设置为相同的目录
    //$unknowns默认设置为"remove"
    function Template($root=".",$unknowns="remove")
    {
        $this->set_root($root);
        $this->set_unknowns($unknowns);
    }
        
    function set_root($root)//该方法设定$root的值,也就是模板文件的存放目录
    {
        if(!is_dir($root))//如果参数不是目录名,返回错误并停止
        {
        $this->halt("set_root: $root is not a directory.");
        return false;
        }
        $this->root=$root;
        return true;
    }
    function set_unknowns($unknowns="keep")//该方法设定属性unknowns的值
    {
        $this->unknowns=$unknowns;
    }
    function set_file($handle,$filename="")//该方法在数组file中根据$handle提供的键名加入值
    {
        if (!is_array($handle))//如果$handle不是数组
        {
        if($filename=="")//文件名为空则返回错误并停止
        {
                   $this->halt("set_file:For handle $handle filename is empty.");
            return false;
        }
        $this->file[$handle]=$this->filename($filename);//否则用$handle为键名添加新值到$file数组
        }
        else //如果$handle是数组
       {
           reset($handle);
                
           while (list($h,$f)=each($handle))//将$handle的键名作为file数组的键名
           {
        $this->file[$h]=$this->filename($f);//将键名对应的值作为file数组的值
           }
       }
    }
    
    function set_block($parent,$handle,$name="")//该方法取出某个模板文件中的一个子模板将其作为“块”来加载并用另外一个模板变量取代之
    {
        if (!$this->loadfile($parent)) 
        {
             $this->halt("subst: unable to load $parent.");
             return false;    
        }
       if($name=="") $name=$handle;//没有指定模板变量的值就用子模板名作为模板变量名
        $str=$this->get_var($parent);
            $reg="/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
        
    //进行抽取和替换
       preg_match_all($reg,$str,$m);
       $str=preg_replace($reg,"{"."$name}",$str);//替换父模板中的子模板
       $this->set_var($handle,$m[1][0]);//子模板内容放在$handle为键值的数组元素中
       $this->set_var($parent,$str);//重新写入替换后的父模板
    }
        
    function set_var($varname,$value="")//该方法向$varkeys和$varvals数组中添加新的键--值对
    {
        if(!is_array($varname))//如果$varname不是数组
        {
            if(!empty($varname))
            {
        if ($this->debug) print "scalar: set *$varname* to *$value*<br><br>";
        $this->varkeys[$varname]="/".$this->varname($varname)."/";
        $this->varvals[$varname]=$value;
             }
        }
       else //如果$varname是数组
       {
            reset($varname);
            while (list($k,$v)=each($varname)) 
           {
        if(!empty($k))
        {
            if ($this->debug) print "array:set *k* to *$v*<br><br>";
            $this->varkeys[$k]="/".$this->varname($k)."/";
            $this->varvals[$k]=$v;
        }    
           }
       }
    }
    
    function subst($handle)//该方法将模板文件中的变化内容替换成确定内容的操作,实现了数据和显示的分离
    {
        if (!$this->loadfile($handle))//加载模板文件,如果失败返回错误信息并停止 
        {
        $this->halt("subst: unable to load $handle.");
        return false;    
        }
        $str=$this->get_var($handle);//读入文件内容到字符串$str
        //对所有的已知键值进行替换并返回结果
        $str=@preg_replace($this->varkeys,$this->varvals,$str);
        return $str;
    }
        
    function psubst($handle)//该方法功能和susst相同,只是直接输出替换结果
    {
        print $this->subst($handle);
        return false;
    }
        
    function parse($target,$handle,$append=false)//该方法将$handle代表的一个或多个文件中的内容完成替换存放在$target为键值的varvals数组元素中或追加到其后返回值和方法subst相同
    {
        if(!is_array($handle))
        {
        $str=$this->subst($handle);
        if($append)
        {
                   $this->set_var($target,$this->get_var($target).$str);
        }
        else
        {
            $this->set_var($target,$str);
        }
        }
        else 
        {
        reset($handle);
        while (list($i,$h)=each($handle)) 
        {
                    $str=$this->subst($h);
             $this->set_var($target,$str);
        }
        return $str;
         }
        
    function pparse($target,$handle,$append=false)//该方法的功能与方法parse相同,只是该方法将结果输出
    {
        print $this->parse($target,$handle,$append);
        return false;
    }
        
    function get_vars()//该方法返回所有的键--值对中的值所组成的数组
    {
        reset($this->varkeys);
        while (list($k,$v)=each($this->varkeys)) 
        {
            $result[$k]=$this->varvals[$k];    
        }
        return $result;
    }
        
    function get_var($varname)//该方法根据键名返回对应的键--值对的值
    {
         if(!is_array($varname))//如果$varname不是数组
         {
        return $this->varvals[$varname];//直接返回其对应的varvals数组中的值
         }
         else    //如果$varname是数组
         {
              reset($varname);
        while (list($k,$v)=each($varname))
        {
            $result[$k]=$this->varvals[$k];
        }
        return $result;
         }
    }
        
    function get_undefined($handle)
    {
         //如果加载文件失败,返回错误并停止
         if(!$this->loadfile($handle))
         {
        $this->halt("get_undefined: unable to load $handle.");
        return false;
         }
         preg_match_all("/\{([^}]+)\}/",$this->get_var($handle),$m);
         $m=$m[1];
         //如果无法找到匹配的文本返回错误
         if (!is_array($m))  return false;
         //如果能够找到大括号中的非空字符则将其值作为键值,组成一个数组    
         reset($m);
         while (list($k,$v)=each($m)) 
         {
        if(!isset($this->varkeys[$v]))
        $result[$v]=$v;
         }
    
         //该数组不为空就返回该数组,否则返回错误
         if(count($result)) return $result;
         else return false;
    }
        
    function finish($str)//该方法的作用是完成对$str的最后的处理工作,利用类的属性$unknowns来确定对模板中无法处理的动态部分的处理方法
    {
         switch ($this->unknowns)
         {
        case "keep"://keep保持不变
         break;
        
        case "remove"://remove删除所有的非控制字符
        $str=preg_replace('/{[^\t\r\n}]+}/',"",$str);
        break;
            
        case "comment"://comment将大括号中的动态部分替换为html注释
        $str=preg_replace('/{([^ \t\r\l])+})/',"<!--Template $handle:Variable\\1 underfined-->",$str);
        break;
         }
         return $str;
    }
        
    function p($varname)//该方法将参数变量对应的varvals数组中的值处理后输出
    {
         print $this->finish($this->get_var($varname));
    }
        
    function get($varname)//该方法将参数变量对应的varvals数组中的值处理后返回
    {
         return $this->finish($this->get_var($varname));
    }
    function filename($filename)//该方法的作用是检查并补充给定的文件名
    {
        if(substr($filename,0,1)!= "/")//如果文件名不是以/开头,则表示是相对路径,将其补充为完整的绝对路径
        {
             $filename=$this->root."/".$filename;
        }
        if (!file_exists($filename))//如果该文件不存在,停止并输出错误消息
        {
             $this->halt("filename: file $filename does not exist.");    
        }
        return $filename;//返回的值为有效的文件名
    }
        
    function varname($varname)
    {
         return preg_quote("{".$varname."}");
    }
    
    function loadfile($handle)//该方法根据$handle加载文件到键--值对中
    {//如果已经加载了$handle为句柄的文件,直接返回真值
         if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle])) return true;             if(!isset($this->file[$handle]))//如果句柄没有设定,返回错误并停止
         {
        $this->halt("loadfile: $handle is not a valid handle.");
        return false;
         }
         $filename=$this->file[$handle];//句柄有效则取出对应的文件名
         $str=implode("",@file($filename));//将文件的每一行连接成一个字符串
         if(empty($str))//字符串空说明文件空或者不存在,返回错误并停止
         {
        $this->halt("loadfile: While loading $handle,$filename does not exist or is empty.");
        return false;
         }
        
         //如果文件不为空,用$handle作为句柄,$str为变量名向键--值对中添加新的键--值
         $this->set_var($handle,$str);
         return true;
    }
    
    function halt($msg)//该方法停止程序运行并给出错误信息
    {
        $this->last_error=$msg;
        if($this->halt_on_error!="no")
        $this->haltmsg($msg);
        
        if($this->halt_on_error=="yes")
         die("<b>Halted.</b>");
        
        return false;
    }
        
    function haltmsg($msg)//该方法给出错误信息
    {
        printf("<b>Template Error:</b>%s<br><br>",$msg);
    }
    }
?> 

原文转自:http://www.ltesting.net