喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: 发现一短小模板。。。。。。。。  
 
lad (lad)
论坛元老
Rank: 8Rank: 8
高级会员



UID 18027
精华 2
积分 3250
帖子 3223
金钱 3230 喜悦币
威望 20
人脉 0
阅读权限 90
注册 2003-1-2
来自 卧龙深居
状态 离线
发现一短小模板。。。。。。。。

附件里有例子。

<?php
/**
 * Copyright (c) 2003 Brian E. Lozier (brian@massassi.net)
 *
 * set_vars() method contributed by Ricardo Garcia (Thanks!)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

class Template {
    var 
$vars/// Holds all the template variables
    
var $path/// Path to the templates

    /**
     * Constructor
     *
     * @param string $path the path to the templates
     *
     * @return void
     */
    
function Template($path null) {
        
$this->path $path;
        
$this->vars = array();
    }

    
/**
     * Set the path to the template files.
     *
     * @param string $path path to template files
     *
     * @return void
     */
    
function set_path($path) {
        
$this->path $path;
    }

    
/**
     * Set a template variable.
     *
     * @param string $name name of the variable to set
     * @param mixed $value the value of the variable
     *
     * @return void
     */
    
function set($name$value) {
        
$this->vars[$name] = $value;
    }

    
/**
     * Set a bunch of variables at once using an associative array.
     *
     * @param array $vars array of vars to set
     * @param bool $clear whether to completely overwrite the existing vars
     *
     * @return void
     */
    
function set_vars($vars$clear false) {
        if(
$clear) {
            
$this->vars $vars;
        }
        else {
            if(
is_array($vars)) $this->vars array_merge($this->vars$vars);
        }
    }

    
/**
     * Open, parse, and return the template file.
     *
     * @param string string the template file name
     *
     * @return string
     */
    
function fetch($file) {
        
extract($this->vars);          // Extract the vars to local namespace
        
ob_start();                    // Start output buffering
        
include($this->path $file);  // Include the file
        
$contents ob_get_contents(); // Get the contents of the buffer
        
ob_end_clean();                // End buffering and discard
        
return $contents;              // Return the contents
    
}
}

/**
 * An extension to Template that provides automatic caching of
 * template contents.
 */
class CachedTemplate extends Template {
    var 
$cache_id;
    var 
$expire;
    var 
$cached;

    
/**
     * Constructor.
     *
     * @param string $path path to template files
     * @param string $cache_id unique cache identifier
     * @param int $expire number of seconds the cache will live
     *
     * @return void
     */
    
function CachedTemplate($path$cache_id null$expire 900) {
        
$this->Template($path);
        
$this->cache_id $cache_id 'cache/' md5($cache_id) : $cache_id;
        
$this->expire   $expire;
    }

    
/**
     * Test to see whether the currently loaded cache_id has a valid
     * corrosponding cache file.
     *
     * @return bool
     */
    
function is_cached() {
        if(
$this->cached) return true;

        
// Passed a cache_id?
        
if(!$this->cache_id) return false;

        
// Cache file exists?
        
if(!file_exists($this->cache_id)) return false;

        
// Can get the time of the file?
        
if(!($mtime filemtime($this->cache_id))) return false;

        
// Cache expired?
        
if(($mtime $this->expire) < time()) {
            @
unlink($this->cache_id);
            return 
false;
        }
        else {
            
/**
             * Cache the results of this is_cached() call.  Why?  So
             * we don't have to double the overhead for each template.
             * If we didn't cache, it would be hitting the file system
             * twice as much (file_exists() & filemtime() [twice each]).
             */
            
$this->cached true;
            return 
true;
        }
    }

    
/**
     * This function returns a cached copy of a template (if it exists),
     * otherwise, it parses it as normal and caches the content.
     *
     * @param $file string the template file
     *
     * @return string
     */
    
function fetch_cache($file) {
        if(
$this->is_cached()) {
            
$fp = @fopen($this->cache_id'r');
            
$contents fread($fpfilesize($this->cache_id));
            
fclose($fp);
            return 
$contents;
        }
        else {
            
$contents $this->fetch($file);

            
// Write the cache
            
if($fp = @fopen($this->cache_id'w')) {
                
fwrite($fp$contents);
                
fclose($fp);
            }
            else {
                die(
'Unable to write cache.');
            }

            return 
$contents;
        }
    }
}
?>
2004-4-26 06:13 PM#1
查看资料  访问主页  发短消息  顶部
 
oldsword (oldsword)
注册会员
Rank: 2
中级会员



UID 26481
精华 0
积分 183
帖子 179
金钱 183 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-2-27
状态 离线
[推荐阅读] 请教一个问题
有没中文注释
2004-4-26 09:38 PM#2
查看资料  访问主页  发短消息  顶部
 
shukebeita (shukebeita)
注册会员
Rank: 2
中级会员



UID 25060
精华 0
积分 151
帖子 151
金钱 151 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-12-6
状态 离线
[推荐阅读] 如何把上传的图片保存到mysql中?
我用的就是这个。效率相当高,因为他根本就是php 而不是什么parser 。这个模板是采用push方法绑定数据模板中效率最高的一个。但是这个模板有一个小问题我做了一些修改。
2004-4-26 10:12 PM#3
查看资料  访问主页  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.037295 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP