/* public: get_vars()
   */
  function get_vars() {
    reset($this->varkeys);
    while(list($k, $v) = each($this->varkeys)) {
      $result[$k] = $this->varvals[$k];
    }
    
    return $result;
  }
  
  /* public: get_var(string varname)
   * varname: name of variable.
   *
   * public: get_var(array varname)
   * varname: array of variable names
   */
  function get_var($varname) {
    if (!is_array($varname)) {
      return $this->varvals[$varname];
    } else {
      reset($varname);
      while(list($k, $v) = each($varname)) {
        $result[$k] = $this->varvals[$k];
      }
      
      return $result;
    }
  }
  
  /* public: get_undefined($handle)
   * handle: handle of a template.
   */
  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;
  }  /* public: finish(string $str)
   * str: string to finish.
   */
  function finish($str) {
    switch ($this->unknowns) {
      case "keep":
      break;
      
      case "remove":
        $str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
      break;      case "comment":
        $str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \1 undefined -->", $str);
      break;
    }
    
    return $str;
  }  /* public: p(string $varname)
   * varname: name of variable to print.
   */
  function p($varname) {
    print $this->finish($this->get_var($varname));
  }  function get($varname) {
    return $this->finish($this->get_var($varname));
  }
    
  /***************************************************************************/
  /* private: filename($filename)
   * filename: name to be completed.
   */
  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;
  }
  
  /* private: varname($varname)
   * varname: name of a replacement variable to be protected.
   */
  function varname($varname) {
    return preg_quote("{".$varname."}");
  }  /* private: loadfile(string $handle)
   * handle:  load file defined by handle, if it is not loaded yet.
   */
  function loadfile($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;
    }
    
    $str = $this->parsepath($str);//替换图片路径    $this->set_var($handle, $str);
    
    return true;
  }
  
  /*  重新分析替换模版目录下指定路径(一般为图片文件路径)
   */
  function parsepath($str = ""){
      if("/" != substr($this->path, -1)){
        $this->path .= "/";
    }
    if("./" == $this->path) return $str;
    $str = preg_replace("|".$this->path."|", $this->root."/".$this->path, $str);
    return $str;
  }  /***************************************************************************/
  /* public: halt(string $msg)
   * msg:    error message to show.
   */
  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;
  }
  
  /* public, override: haltmsg($msg)
   * msg: error message to show.
   */
  function haltmsg($msg) {
    printf("<b>Template Error:</b> %s<br>\n", $msg);
  }
}
?>
<?
//这个声明表明moban目录和img目录在同一级目录下
$t = new Template("moban", "../img");//这个表明img目录在moban目录里
$t = new Template("moban", "img");?>

解决方案 »

  1.   

    怎么没有人用PHPLIB吗?还是我的修改的并没有应用价值?伤心呀~~~~~~~~~~~~~~~~~~
      

  2.   

    我一直用phplib,不错从没遇见过图片路径问题,
      

  3.   

    顶一下....呵...我也用的是phplib,关于路径问题的确比较要命.一般我是把路径部分单独抓出来的.好好看看楼主的代码哈.
      

  4.   

    不会吧,那请教了,请问你是如何使用的?
    你可不要告诉我你的图片和模版文件放在同一个目录里的哦。
    我一般的目录是这样子的。
    /--template
    |    |---images
    |    |     |--image1.jpg
    |    |     |--image2.jpg
    |    |     |--image3.jpg
    |    |---moban1.htm
    |    |---moban2.htm
    |    |---moban2.htm
    |---index.php
    |---other.php这样子的结果是moban1.htm,moban2.htm等文件里的图片路径一般就是images/image1.jgp之类的,
    但被要目录下的PHP文件读取这些模版文件之后会出现图片找不到的情况,也就是应该把模版文件里的路径加上template目录
      

  5.   

    我刚才的问题问 strayly(飘在四方) 的,他有比楼主更好的方法吗?