suchen
Heimphp教程php手册给PHPLIB模版加两个函数,解决模版文件内图片、CSS和JS包括路径问题

加了两个函数,用法和原来的一样,具体看代码里面说明。
只是在声明的时候要指定图片的路径,默认为当前目录,也就是PHP文件所在目录。
注意的是图片目录要相对于模版文件目录的,模版文件和图片文件不能在同一级目录下。

/*

* Session Management for PHP3

*

* (C) Copyright 1999-2000 NetUSE GmbH

*                    Kristian Koehntopp

*

* $Id: template.inc,v 1.5 2000/07/12 18:22:35 kk Exp $

*

*/

class Template {

  var $classname = "Template";

  /* if set, echo assignments */

  var $debug     = false;

  /* $file[handle] = "filename"; */

  var $file  = array();


  /* relative filenames are relative to this pathname */

  var $root   = "";

  /* $varkeys[key] = "key"; $varvals[key] = "value"; */

  var $varkeys = array();

  var $varvals = array();

  /* "remove"  => remove undefined variables

   * "comment" => replace undefined variables with comments

   * "keep"    => keep undefined variables

   */

  var $unknowns = "remove";

  /* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */

  var $halt_on_error  = "yes";

  /* last error message is retained here */

  var $last_error     = "";

  var $path = ".";

  /*********************************/

  /* public: Constructor.

   * root:     template directory.

   * unknowns: how to handle unknown variables.

   */

  function Template($root = ".", $path = ".", $unknowns = "remove") {

    $this->set_root($root);

    $this->set_path($path);

    $this->set_unknowns($unknowns);

  }

  /* 设置图片路径

   */

  function set_path($path){

    if($path == ".") return true;

    if (!is_dir($this->root . "/" . $path)) {

      $this->halt("set_path: $path is not a directory.");

      return false;

    }

    $this->path = $path;

    return true;

  }

  /* public: setroot(pathname $root)

   * root:   new template directory.

   */ 

  function set_root($root) {

    if (!is_dir($root)) {

      $this->halt("set_root: $root is not a directory.");

      return false;

    }

    $this->root = $root;

    return true;

  }

  /* public: set_unknowns(enum $unknowns)

   * unknowns: "remove", "comment", "keep"

   *

   */

  function set_unknowns($unknowns = "keep") {

    $this->unknowns = $unknowns;

  }

  /* public: set_file(array $filelist)

   * filelist: array of handle, filename pairs.

   *

   * public: set_file(string $handle, string $filename)

   * handle: handle for a filename,

   * filename: name of template file

   */

  function set_file($handle, $filename = "") {

    if (!is_array($handle)) {

      if ($filename == "") {

        $this->halt("set_file: For handle $handle filename is empty.");

        return false;

      }

      $this->file[$handle] = $this->filename($filename);

    } else {

      reset($handle);

      while(list($h, $f) = each($handle)) {

        $this->file[$h] = $this->filename($f);

      }

    }

  }


  /* public: set_block(string $parent, string $handle, string $name = "")

   * extract the template $handle from $parent,

   * place variable {$name} instead.

   */

  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 = "/(.*)\ns*/sm";

    preg_match_all($reg, $str, $m);

    $str = preg_replace($reg, "{" . "$name}", $str);

    $this->set_var($handle, $m[1][0]);

    $this->set_var($parent, $str);

    $this->set_var($name);

  }
 

  /* public: set_var(array $values)

   * values: array of variable name, value pairs.

   *

   * public: set_var(string $varname, string $value)

   * varname: name of a variable that is to be defined

   * value:   value of that variable

   */

  function set_var($varname, $value = "") {

    if (!is_array($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;

      }

    }

  }

  /* public: subst(string $handle)

   * handle: handle of template where variables are to be substituted.

   */

  function subst($handle) {

    if (!$this->loadfile($handle)) {

      $this->halt("subst: unable to load $handle.");

      return false;

    }

    $str = $this->get_var($handle);

    $str = @preg_replace($this->varkeys, $this->varvals, $str);

    return $str;

  }

  /* public: psubst(string $handle)

   * handle: handle of template where variables are to be substituted.

   */

  function psubst($handle) {

    print $this->subst($handle);

   

    return false;

  }

  /* public: parse(string $target, string $handle, boolean append)

   * public: parse(string $target, array  $handle, boolean append)

   * target: handle of variable to generate

   * handle: handle of template to substitute

   * append: append to target handle

   */

  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;

  }

  function pparse($target, $handle, $append = false) {

    print $this->parse($target, $handle, $append);

    return false;

  }

  /* 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}]+)}/', "", $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("Halted.");

    return false;

  }


  /* public, override: haltmsg($msg)

   * msg: error message to show.

   */

  function haltmsg($msg) {

    printf("Template Error: %s
\n", $msg);

  }

}

?>

//这个声明表明moban目录和img目录在同一级目录下

$t = new Template("moban", "../img");

//这个表明img目录在moban目录里

$t = new Template("moban", "img");

?>



Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.