冰凌尘埃

对于明天,你是否有勇气有能力去承担?

用户操作
[即时聊天] [发私信] [加为好友]
冰凌尘埃ID:fzjw
21125次访问,排名5943(-2),好友1人,关注者13人。
己所不欲,勿施于人
fzjw的文章
原创 19 篇
翻译 2 篇
转载 2 篇
评论 39 篇
冰凌尘埃的公告

#include<string>

string message == none;

最近评论
allstar:哦 那谢谢你了。 我非常喜欢这个配置。 可惜一不小心,被我弄丢了。 现在找了好久丢哦找不到了
bob:链接的网站停了,我也想要一份,请更新网站或传到信箱:ren_shijun@163.com
xiaofeng:忘了存哪里了......

等我找到后发给你
allstar:连接都失效了. 不知道你还有没有? 我用过一段时间, 非常喜欢他的简洁, 后来重装弄丢了, 你有的话可以发给我吗?
邮 箱:hewenxin81#yahoo.com.cn
请把#改为@ 谢谢!
allstar:连接都失效了. 不知道你还有没有? 我用过一段时间, 非常喜欢他的简洁, 后来重装弄丢了, 你有的话可以发给我吗?
邮 箱:hewenxin81#yahoo.com.cn
请把#改为@ 谢谢!
文章分类
收藏
    相册
    我的相册
    BSD/Linux
    FreeBSD CHINA
    FreeBSD官方网站
    中文FreeBSD用户组
    Database
    Mysql官方网站
    PostgreSQL官方网站
    Developer
    Apache官方网站
    C Programming.com
    C/C++ Reference
    Eclipse官方
    GCC Home Page
    Minimalist GNU for Windows
    PHP-MVC网站
    PHP官方网站
    Zend官方网站
    超越PHP
    常去的地方
    China UNIX
    CSDN论坛
    FreeBSD CHINA中文论坛
    IBM DeveloperWorks
    SourceForge.net
    ZDNet CHINA
    中国Linux公社
    西祠胡同
    朋友的blog
    drixe的专栏
    livid的blog
    黑暗天使的blog
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    翻译 推荐:PHPLIB模板处理类(翻译了注释)收藏

    新一篇: PC不只是很便宜的工作站 | 旧一篇: 取得客户端信息(浏览器/IP/操作系统)

    <?php
    class Template
    {
      var $classname = "Template";
      var $debug = false;

    //包含所有的模板文件名和模板名的数组
      var $file = array();

    //$root为模板文件存放的目录
      var $root = "";

    //$varkeys[key] = "key";          //存放文本元素的键名
    //$varvals[key] = "value";        //存放文本元素的值
      var $varkeys = array();
      var $varvals = array();

    //属性$unknowns设定了对未知内容的处理方法
      var $unknowns = "remove";

    //设定是否在发生错误的时候停止
      var $halt_on_error = "yes";

    //记录最后一个错误信息
      var $last_error = "";

    //构造函数默认将模板文件目录设置为相同的目录
    //$unknowns默认设置为"remove"

    function Template($root = " ",$unknowns = "remove"){
      $this->set_root($root);
      $this->set_unknowns($unknowns);
    }

    //该方法设定$root的值,也就是模板文件的存放目录
    function set_root($root){
      if(!is_dir($root)){
        $this->halt("set_root:$root is not a directory.");
        return false;
      }
      $this->root = $root;
      return true;
    }

    //该方法设定unknowns的值
    function set_unknowns($unknowns = "keep"){
      $this->unknowns = $unknowns;
    }

    //该方法在数组file中根据$handle提供的键名加入值
    function set_file($handle,$filename = ""){
      if(!is_array($handle)){  //如果$handle不是数组
        if($filename==""){   //文件名为空则返回错误并停止
       $this->halt("set_file:For handle $handle filename is empty.");
       return false;
     }
     //否则用$handle为键名添加新值到file数组
     $this->file[$handle] = $this->filename($filename);
      }
      else{       //如果$handle是数组
        reset($handle);
          while(list($h,$f) = each($handle)){  //将$handle的键名作为file数组的键名,将键名对应的值作为file数组的值
       $this->file[$h] = $this->filename($f);
          }
      }
    }

    //该方法取出某个父模板文件中的一个子模板,将其作为“块”来加载,并用另外一个模板变量取代之
    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 = "/(.*)\n\s*/sm";
     $ename = "{".$name."}";
     //进行抽取和替换
     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);
    }

    //该方法向$varkeys和$varvals数组中添加新的键——值对
    function set_var($varname,$value=""){
      if(!is_array($varname)){      //如果$varname不是数组
        if(!empty($varname))
       if($this->debug) print "scalar:set *$varname to *$value*
    \n";
       $this->varkeys[$varname] = "/".$this->varname($varname)."/";
       $this->varvals[$varname] = $value;
      }
      else{
        reset($varname);
     while(list($k,$v) = each($varname)){
       if(!empty($k))
         if($this->debug) print "array:set *$k* to *$v*
    \n";
      $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;
    }

    //该方法功能和subst相同,只是直接输出替换结果
    function psubst($handle){
      print $this->subst($handle);
      return false;
    }

    //该方法将$handle代表的一个或多个文件中的内容完成替换,存放在$target为键值的varvals数组元素中或追加到其后,返回值和方法subst相同
    function parse($target,$handle,$append = false){
      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;
    }

    //该方法的功能和方法parse相同,只是该方法将结果输出
    function pparse($target,$handle,$append = false){
      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不是数组,直接返回其对应的varvals数组中的值
        return $this->varvals[$varname];
      }
      else{           //如果$varname是数组,返回其所有键值对应的varvals数组中的值所组成的数组
        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;
    }


    //该方法的作用是完成对$str的最后的处理工作,利用类的属性$unknowns来确定对模板中无法处理的动态部分的处理方法
    function finish($str){
      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\1])+})/',"",$str);
     break;
      }
      return $str;
    }


    //该方法将参数变量对应的varvals数组中的值处理后输出
    function p($varname){
      print $this->finish($this->get_var($varname));
    }

    //该方法将参数变量对应的varvals数组中的值处理后返回
    function get($varname){
      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."}");
    }


    //该方法根据$handle加载文件到键——值对中
    function loadfile($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 ("Halted.");
      return false;
    }

    //该方法给出错误信息
    function haltmsg($msg){
      printf("Template Error:%s\r\n",$msg);
    }
    }
    ?>

    发表于 @ 2004年08月06日 10:50:00|评论(loading...)|编辑

    新一篇: PC不只是很便宜的工作站 | 旧一篇: 取得客户端信息(浏览器/IP/操作系统)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 冰凌尘埃