仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1347|回复: 18
打印 上一主题 下一主题

[学习教程] PHP编程:给PHPLIB模版加两个函数,处理模版文件...

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:57:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,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[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 = "/<!--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[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*<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[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");
?>
因为函数实在是太多了,慢慢的你就会知道,知道有这个函数就可以。
小妖女 该用户已被删除
沙发
发表于 2015-2-4 07:18:59 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
莫相离 该用户已被删除
板凳
发表于 2015-2-9 18:44:14 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
再现理想 该用户已被删除
地板
发表于 2015-2-10 04:36:26 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
柔情似水 该用户已被删除
5#
发表于 2015-2-28 19:49:00 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
乐观 该用户已被删除
6#
发表于 2015-3-6 17:19:06 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-8 17:23:23 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-16 07:39:26 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
活着的死人 该用户已被删除
9#
发表于 2015-3-16 11:36:04 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
若相依 该用户已被删除
10#
发表于 2015-3-22 22:12:34 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
爱飞 该用户已被删除
11#
发表于 2015-3-24 09:55:30 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
因胸联盟 该用户已被删除
12#
发表于 2015-4-1 03:10:56 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
飘灵儿 该用户已被删除
13#
发表于 2015-4-15 10:31:42 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
兰色精灵 该用户已被删除
14#
发表于 2015-4-21 00:32:48 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
深爱那片海 该用户已被删除
15#
发表于 2015-4-21 14:25:19 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
小女巫 该用户已被删除
16#
发表于 2015-5-10 03:47:22 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
冷月葬花魂 该用户已被删除
17#
发表于 2015-7-2 23:46:23 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
金色的骷髅 该用户已被删除
18#
 楼主| 发表于 2015-7-6 13:32:48 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
灵魂腐蚀 该用户已被删除
19#
发表于 2015-7-7 04:12:29 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 00:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表