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

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: [原创]从 Vant 吸收而来的 Template 类  
 
snakevil (snakevil)
中级会员
Rank: 3Rank: 3
中级会员



UID 27209
精华 3
积分 261
帖子 201
金钱 231 喜悦币
威望 30
人脉 0
阅读权限 30
注册 2004-3-24
状态 离线
[原创]从 Vant 吸收而来的 Template 类

首先要感谢 lwg888 同志
我自己这个类的原型就来自于 Vant.v3.0

体会到二次编译的优势、就偷梁换柱重新完成了这个类

不过在一些细节处理上
我以我自己认为相对较好的方式作了更改
所以现在再和 Vant.v3.0 来对比
抄袭的意味就不那么浓重了

<?php

/**
 * @ Page : Class.Template.PHP
 * @ Copyright : Snakevil, 1998-2004
 * @ Author : Snakevil
 *
 * @ Usage :
 * 定义 Template 模版操作类。
 *
 * @ Notes :
 *  + 4:25 2004-6-9
 *    正式完成最初版本。
 *
 * @ Related Instructions :
 * 所有指令允许在非关键处存在不定量空格,但属性设定如 page= 之类禁止存在空格
 * 单独变量
 *   单变量 {[ test_var ]}
 *   数组子项 {[ test_arr['test_idx'] ]}
 * 页面嵌套
 *   直接页面连接指定 {[ nest page="demo.htm" ]}
 *   变量页面连接指定 {[ nest page=test_var ]}
 *   带预定变量值的页面连接指定 {[ nest page="demo.htm?title=测试页面标题 ]}
 *     在此示例中,demo.htm 模版中 {[title]} 强制性定义为 测试页面标题
 * 循环块
 *   自然数循环
 *     默认循环 {[ loop name=loop_name data=test_var ]} {[ / loop ]}
 *       在此示例中,假设 test_var 值为 100,则执行从 0 到 99 的循环
 *     指定步进循环 {[loop name=loop_name data=test_var from=4 step=2]}{[/loop]}
 *       在此示例中,假设 test_var 值为 100,则执行从 4 到 98 的双数循环
 *       在此示例中,假设 test_var 值为一长度为 8 数组,则执行从第 4 项到第 8 项
 *         的双数项循环
 *   数据集循环 {[ loop name=loop_name data=test_var ]} {[ / loop ]}
 *     在此示例中,假设 test_var 为一长度为 8 的数组,则遍历所有 8 个子项
 *   嵌套循环
 *     {[ loop name=loop_1 data=var_1 ]}
 *       {[ loop name=loop_2 data=val[loop_1] ]}
 *         {[ value[loop_2]['name'] ]} : {[ value[loop_2]['value'] ]}
 *       {[ / loop ]}
 *     {[ / loop ]}
 *     在此示例中,遍历 var_1 一次,每 var_1 子项对应遍历 var_2 一次
 *
 */

/**- Content Start -----------------------------------------------------------*/

if (defined('SWORK_COPYRIGHT') && SWORK_COPYRIGHT === 'SNakeVil 1998-2004') {
/** 类封装开始 */

/**
 * @ Purpose :
 * 指定目录为模版文件保存目录
 * @ Constant Name : SWORK_TEMPLATE_DIR_TPL
 */
define('SWORK_TEMPLATE_DIR_TPL'1);
/**
 * @ Purpose :
 * 指定目录为编译后模版文件保存目录
 * @ Constant Name : SWORK_TEMPLATE_DIR_CPL
 */
define('SWORK_TEMPLATE_DIR_CPL'2);
/**
 * @ Purpose :
 * 指定目录为缓存文件保存目录
 * @ Constant Name : SWORK_TEMPLATE_DIR_BFR
 */
define('SWORK_TEMPLATE_DIR_BFR'3);

/**
 * @ Purpose :
 * _swork_ 标准 utility 类 Template
 * @ Package Name : Template
 * @ Author : SNakeVil
 * @ Modifications :
 *
 * @ See Alse :
 */
class FwSnvTemplate extends FwSnvBaseClass {
    
/**
     * @ Purpose :
     * 模版文件保存目录
     * @ Type : string
     */
    
var $mTemplateDir;
    
/**
     * @ Purpose :
     * 编译后模版文件保存目录
     * @ Type : string
     */
    
var $mCompiledDir;
    
/**
     * @ Purpose :
     * 缓存文件保存目录
     * @ Type : string
     */
    
var $mBufferDir;
    
/**
     * @ Purpose :
     * 应用到模版中的变量列表
     * @ Type : array
     */
    
var $mVars;
    
/**
     * @ Purpose :
     * 应用到的模版文件列表
     * @ Type : array
     */
    
var $mTemplateFiles;
    
/**
     * @ Purpose :
     * 相应的编译后的模版文件列表
     * @ Type : array
     */
    
var $mCompiledFiles;
    
/**
     * @ Purpose :
     * 相应的缓存文件列表
     * @ Type : 
     */
    
var $mBufferFiles;
    
/**
     * @ Purpose :
     * 应用到的虚拟模版文件(从网络、数据库中获得)列表
     * @ Type : array
     */
    
var $mTemplateVirtual;
    
/**
     * @ Purpose :
     * 模版指令开始标记
     * @ Type : string
     */
    
var $mDelimiterLeft;
    
/**
     * @ Purpose :
     * 模版指令结束标记
     * @ Type : string
     */
    
var $mDelimiterRight;
    
/**
     * @ Purpose :
     * 模版指令前缀标记
     * @ Type : string
     */
    
var $mDelimiterPrefix;
    
/**
     * @ Purpose :
     * 编译时使用到的模版列表
     * @ Type : array
     */
    
var $mTemplates;

    
/**
     * @ Initialize Method @
     * @ Parameters :
     * string $_TplDir 原始模版文件保存目录
     * string $_CplDir 编译模版文件保存目录
     * string $_BfrDir 缓存文件保存目录
     */
    
function FwSnvTemplate($_TplDir 'Templates'$_CplDir 'Templates_C'$_BfrDir 'Templates_B')

    
/**
     * @ Purpose :
     * 设置必须的目录
     * @ Method Name : SetDir()
     * @ Parameters :
     * string $_Dir 设定的目录
     * constant $_DirType 目录对应的内置固化设定
     * boolean $_IngoreError 指定目录不符合要求时是否继续
     * @ Return : boolean 是否设置成功
     */
    
function SetDir($_Dir ''$_DirType SWORK_TEMPLATE_DIR_TPL$_IngoreError FALSE)
    
/**
     * @ Purpose :
     * 设置模版中存在但应用时并未指定的变量显示的内容
     * @ Method Name : SetUDefault()
     * @ Parameters :
     * string $_Str 显示内容
     * @ Return : boolean 是否设置成功
     */
    
function SetUDefault($_Str '')
    
/**
     * @ Purpose :
     * 设置模版指令分割符
     * @ Method Name : SetDelimiter()
     * @ Parameters :
     * string $_Left 左分隔符
     * string $_Right 右分隔符
     * string $_Prefix 前缀分隔符
     * @ Return : boolean 是否设置成功
     */
    
function SetDelimiter($_Left '{'$_Right '}'$_Prefix '')

    
/**
     * @ Purpose :
     * 格式化文件名
     * @ Method Name : pFormatName()
     * @ Parameters :
     * reference string $_FileName 需格式化的文件名称
     * @ Return : mixed 完全格式化后的文件名
     */
    
function pFormatName(& $_FileName)

    
/**
     * @ Purpose :
     * 加载模版文件
     * @ Method Name : LoadTemplate()
     * @ Parameters :
     * string $_FileName 原始文件名
     * @ Return : boolean 是否加载成功
     */
    
function LoadTemplate($_FileName '')
    
    
/**
     * @ Purpose :
     * 加载虚拟模版内容
     * @ Method Name : LoadVirtual()
     * @ Parameters :
     * string $_Name 虚拟模版内容名称
     * string $_TplContent 虚拟模版内容
     * integer $_ModTime 虚拟模版内容修改时间
     * @ Return : boolean 是否加载成功
     */
    
function LoadVirtual($_Name ''$_TplContent ''$_ModTime 0)

    
/**
     * @ Purpose :
     * 生成编译模版文件的文件名
     * @ Method Name : pGenCplFileName()
     * @ Parameters :
     * string $_FileName 原始文件名
     * @ Return : mixed 生成的文件名
     */
    
function pGenCplFileName($_FileName '')
    
/**
     * @ Purpose :
     * 添加应用到的变量
     * @ Method Name : AddVar()
     * @ Parameters :
     * string $_Key 变量名称
     * mixed $_Value 变量内容
     * @ Return : boolean 是否添加成功
     */
    
function AddVar($_Key ''$_Value '')
    
/**
     * @ Purpose :
     * 添加应用到的变量
     * @ Method Name : AddMultiVar()
     * @ Parameters :
     * array $_List 要添加的变量对应列表
     * @ Return : boolean 是否添加成功
     */
    
function AddMultiVars($_List = array())

    
/**
     * @ Purpose :
     * 判断模版文件是否被编译过
     * @ Method Name : IsCompiled()
     * @ Parameters :
     * string $_FileName 进行判断的模版文件名
     * @ Return : boolean 是否被编译过
     */
    
function IsCompiled($_FileName '')
    
/**
     * @ Purpose :
     * 重新编译模版文件
     * @ Method Name : UpdateCompiled()
     * @ Parameters :
     * string $_FileName 进行判断的模版文件名
     * @ Return : boolean 编译是否成功
     */
    
function UpdateCompiled($_FileName '')

    
/**
     * @ Purpose :
     * 读取模版文件内容
     * @ Method Name : pReadFile()
     * @ Parameters :
     * string $_FileName 模版文件名
     * @ Return : mixed 模版文件的内容
     */
    
function pReadFile($_FileName '')

    
/**
     * @ Purpose :
     * 解析模版内容中的页面嵌套
     * @ Method Name : ParseInclude()
     * @ Parameters :
     * reference string $_rContent 要解析的模版内容
     * @ Return : boolean 是否解析成功
     */
    
function ParseInclude(& $_rContent)

    
/**
     * @ Purpose :
     * 解析模版内容中的直接变量
     * @ Method Name : ParseVars()
     * @ Parameters :
     * reference string $_rContent 要解析的模版内容
     * @ Return : boolean 是否解析成功
     */
    
function ParseVars(& $_rContent)

    
/**
     * @ Purpose :
     * 解析模版内容中的循环块
     * @ Method Name : ParseLoops()
     * @ Parameters :
     * reference string $_rContent 要解析的模版内容
     * @ Return : boolean 是否解析成功
     */
    
function ParseLoops(& $_rContent)

    
/**
     * @ Purpose :
     * 格式化索引字符串中的数字和字符串索引
     * @ Method Name : pFormatIndex()
     * @ Parameters :
     * string $_Str 格式化的索引
     * @ Return : mixed 格式化以后的内容
     */
    
function pFormatIndex($_Str '')

    
/**
     * @ Purpose :
     * 解析目标模版文件
     * @ Method Name : Parse()
     * @ Parameters :
     * string $_FileName 模版文件名
     * @ Return : mixed 模版文件的内容
     */
    
function Parse($_FileName '')
}

/** 类封装结束 */
}

?>
2004-7-29 04:40 PM#1
查看资料  访问主页  发短消息  顶部
 
snakevil (snakevil)
中级会员
Rank: 3Rank: 3
中级会员



UID 27209
精华 3
积分 261
帖子 201
金钱 231 喜悦币
威望 30
人脉 0
阅读权限 30
注册 2004-3-24
状态 离线
[推荐阅读] 用header做登陆认证,如何设置认证过期时间?
具体代码

差点忘了
2004-7-29 04:42 PM#2
查看资料  访问主页  发短消息  顶部
 
hua (hua)
中级会员
Rank: 3Rank: 3
中级会员



UID 27144
精华 2
积分 205
帖子 164
金钱 185 喜悦币
威望 20
人脉 0
阅读权限 30
注册 2004-3-22
状态 离线
[推荐阅读] 关于session问题
来个实例..
2004-7-29 05:05 PM#3
查看资料  访问主页  发短消息  顶部
 
lwg888 (lwg888)
金牌会员
Rank: 6Rank: 6
版主



UID 23030
精华 4
积分 1935
帖子 1856
金钱 1895 喜悦币
威望 40
人脉 0
阅读权限 70
注册 2003-9-7
状态 离线
[推荐阅读] 谢谢
回头研究下,再发个vant 4.0
2004-7-29 06:00 PM#4
查看资料  发短消息  顶部
     


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


 




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

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