金色的骷髅 发表于 2015-2-3 23:57:24

PHP编程:给PHPLIB模版加两个函数,处理模版文件...

对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,皮皮你有没?   加了两个函数,用法和本来的一样,详细看代码外面申明。
只是在声明的时分要指定图片的途径,默许为以后目次,也就是PHP文件地点目次。
注重的是图片目次要相对模版文件目次的,模版文件和图片文件不克不及在统一级目次下。
<?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 = "filename"; */
var $file= array();

/* relative filenames are relative to this pathname */
var $root   = "";
/* $varkeys = "key"; $varvals = "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 = "/<!--s+BEGIN $handles+-->(.*)\ns*<!--s+END $handles+-->/sm";
    preg_match_all($reg, $str, $m);
    $str = preg_replace($reg, "{" . "$name}", $str);
    $this->set_var($handle, $m);
    $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*<br>\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*<br>\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;
    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");
?>
因为函数实在是太多了,慢慢的你就会知道,知道有这个函数就可以。

小妖女 发表于 2015-2-4 07:18:59

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

莫相离 发表于 2015-2-9 18:44:14

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

再现理想 发表于 2015-2-10 04:36:26

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

柔情似水 发表于 2015-2-28 19:49:00

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

乐观 发表于 2015-3-6 17:19:06

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

愤怒的大鸟 发表于 2015-3-8 17:23:23

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

飘飘悠悠 发表于 2015-3-16 07:39:26

我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。

活着的死人 发表于 2015-3-16 11:36:04

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

若相依 发表于 2015-3-22 22:12:34

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

爱飞 发表于 2015-3-24 09:55:30

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

因胸联盟 发表于 2015-4-1 03:10:56

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

飘灵儿 发表于 2015-4-15 10:31:42

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

兰色精灵 发表于 2015-4-21 00:32:48

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

深爱那片海 发表于 2015-4-21 14:25:19

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

小女巫 发表于 2015-5-10 03:47:22

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

冷月葬花魂 发表于 2015-7-2 23:46:23

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

金色的骷髅 发表于 2015-7-6 13:32:48

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

灵魂腐蚀 发表于 2015-7-7 04:12:29

兴趣是最好的老师,百度是最好的词典。
页: [1]
查看完整版本: PHP编程:给PHPLIB模版加两个函数,处理模版文件...