精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● PHP>>荷音 PHP 库>>HEYIN 扩展库 2.00 - HTML模版扩展库

主题:HEYIN 扩展库 2.00 - HTML模版扩展库
发信人: bb_rain(小雨)
整理人: jackyz(2001-03-08 09:48:46), 站内信件


                            HTML 模版标签设置说明 ( 2000.11.30 )
-------------------------------------------------------------------------------------------


   标记中的空格可为0个或多个,标记之间可以嵌套。
   变量内部亦可嵌套各种标记(包括块标记和特殊标记),注意灵活运用。


一、普通标记:

1. 变量标记

   说明:               简单输出变量 ( 必须是全局变量 )

   标记:               { 输出变量名 }

   示例:               { name }
                        
2. 字段标记

   说明:               简单输出字段值 ( 相关类必须已经实例化 )

   标记:               { 类名称.输出字段名 }

   示例:               { BBS.title }

3. 函数标记

   其中可以内嵌字段标记

   说明:               经过函数处理,输出变量或字段值 ( 函数必须已定义 )

   标记:               { 函数名(参数1,参数2,...) }
                        { 函数名(变量参数1,变量参数2,...) }
                        { 函数名(字段参数1,字段参数2,...) }

   示例:               { date('Y-m-d','987654321') }
                        { date('Y-m-d','{ createtime }') }
                        { date('Y-m-d','{ USER.createtime }') }

4. 数组标记

   其中可以内嵌字段标记

   说明:               输出指定数组中的某一元素
                        ( 数组必须已定义,可以是多维数组,但必须是全局数组 )

   标记:               { 数组名[参数1,...] }
                        { 数组名[变量参数1,...] }
                        { 数组名[字段参数1,...] }

   示例:               { LEVEL[6] }
                        { LEVEL[{ level }] }
                        { LEVEL[{ USER.level }] }



二、组标记:

  其中可以内嵌普通标记

1. 文本组标记

   说明:               输出文本组 Group Text

   标记:               { GT 输出数组名|缺省值(变量/字段名) }

   示例:               { GT MUSIC|1 }
                        { GT MUSIC|{ music } }
                        { GT MUSIC|{ USER.music } }

2. 检查框组标记

   说明:               输出检查框组 Group Check

   标记:               { GC 输出数组名,返回变量名|缺省值(变量/字段名) }

   示例:               { GC MUSIC,music|'1,3' }
                        { GC MUSIC,music|{ music } }
                        { GC MUSIC,music|{ USER.music } }

3. 单选钮组标记

   说明:               输出单选钮组 Group Radio

   标记:               { GR 输出数组名,返回变量名|缺省值(变量/字段名) }

   示例:               { GR MUSIC,music|1 }
                        { GR MUSIC,music|{ music } }
                        { GR MUSIC,music|{ USER.music } }
                        
4. 文本选择框组标记

   说明:               输出文本型选择框组 Select Text

   标记:               { ST 输出数组名,返回变量名|缺省值(变量/字段名) }

   示例:               { ST EDU,edu|0 }
                        { ST EDU,edu|{ edu } }
                        { ST EDU,edu|{ USER.edu } }
                        
5. 数字选择框组标记

   说明:               输出数值型选择框组 Select Num

   标记:               { SN 输出数组名,返回变量名|缺省值(变量/字段名) }

   示例:               { SN HEIGHT,height|5 }
                        { SN HEIGHT,height|{ height } }
                        { SN HEIGHT,height|{ USER.height } }
                        


三、块标记:

  其中可以内嵌任意标记

1. 普通块标记

   说明:               输出块的内容

   开始标记:           <!-- BEGIN handle -->
   结束标记:           <!-- END handle -->

   只用一个块时 handle 可以省略

2. 管理块标记

   说明:               按不同的管理权限输出块的内容

   开始标记:           <!-- MBEGIN handle -->
   结束标记:           <!-- MEND handle -->

   只用一个块时 handle 可以省略


三、特殊标记:

  其中可以内嵌任意标记

1. 文档路径标记

   说明:               文档路径

   标记:               { DOC_PATH }

2. JS 标记

   说明:               JS 函数

   标记:               { JS handle }

3. 广告标记

   说明:               输出广告的内容

   标记:               { AD handle }

4. 版权标记

   说明:               版权信息

   标记:               { COPYRIGHT handle }


( 使用时另需html扩展库 ... 更多内容请关注 heyin.com,  HEYIN 新社区完全采用扩展库2.00, UML分析, 面向对象方法设计 。。。 )



                            HTML 模版扩展库源码 ( 2000.11.30 )
-------------------------------------------------------------------------------------------


<?

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

Template Module for PHP3 & PHP4 ( v 2.00 )

Copyright (C) 2000 heyin.com, All Rights Reserved.
http://www.heyin.com
Rain ( Email: [email protected] Oicq: 1235686 )

lib_template.php, 2000/11/30

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


// Template Class

class Template {
var $bpatterns = array( array( "/<!--\s*BEGIN\s*(\w*)\|*([^>]*)\s*-->(.*)<!--\s*END\s*\\1\s*-->/sm", "/<!--\s*BEGIN\s*\$h\|*\$k\s*-->(.*)<!--\s*END\s*\$h\s*-->/sm"),
                          array( "/<!--\s*MBEGIN\s*(\w*)\|*([^>]*)\s*-->(.*)<!--\s*MEND\s*\\1\s*-->/sm", "/<!--\s*MBEGIN\s*\$h\|*\$k\s*-->(.*)<!--\s*MEND\s*\$h\s*-->/sm") );
  //  Block Patterns
  var $spatterns = array( array( "/\{\s*(\w+)\s*\}/", "/\{\s*\$k\s*\}/"),
                          array( "/\{\s*(\w+)\.(\w+)\s*\}/", "/\{\s*\$k\.\$v\s*\}/"),
                          array( "/\{\s*(\w+)\(([^\)]*)\)\s*\}/", "/\{\s*\$k\(\$v\)\s*\}/"),
                          array( "/\{\s*(\w+)\[([^\]]*)\]\s*\}/", "/\{\s*\$k\[\$v\]\s*\}/"),
                          array( "/\{\s*GT\s+(\w+)\|([^\}]+)\s*\}/", "/\{\s*GT\s+\$k\|\$v\s*\}/"),
                          array( "/\{\s*GC\s+(\w+\,\w*)\|*([^\}]*)\s*\}/", "/\{\s*GC\s+\$k\|*\$v\s*\}/"),
                          array( "/\{\s*GR\s+(\w+\,\w*)\|*([^\}]*)\s*\}/", "/\{\s*GR\s+\$k\|*\$v\s*\}/"),
                          array( "/\{\s*ST\s+(\w+\,\w*)\|*([^\}]*)\s*\}/", "/\{\s*ST\s+\$k\|*\$v\s*\}/"),
                          array( "/\{\s*SN\s+(\w+\,\w*)\|*([^\}]*)\s*\}/", "/\{\s*SN\s+\$k\|*\$v\s*\}/") );
  //  Sub Pattrens
  var $ubpatterns;
  //  UBB Block Partterns
  var $uspatterns;
  //  UBB Sub Partterns

  var $path = "";                                        //  Template Path
  var $filename = "";                                    //  Template File Name

  var $S = "";                                           //  Out Text

  var $umode;                                            //  UBB Mode
  var $hmode;                                            //  Html Mode
  var $pmode;                                            //  Picture Mode

  //  Create
  function Template($Path, $FileName, $UMode=0, $HMode=1, $PMode=1) {
    $this->path = $Path;
    $this->filename = $FileName;

    $filename = $Path.$FileName;
    $this->S = implode('', file($filename));

    $this->umode = $UMode;
    $this->hmode = $HMode;
    $this->pmode = $PMode;
  }

  //  Parse
  function Parse() {
    $this->S = $this->ParseAllBlock($this->S);
    $this->S = $this->ParseAllFlag($this->S, 0);
  }

  //  Parse All Flag
  function ParseAllBlock($S) {
    $count = sizeof($this->bpatterns);
    for ($i=0; $i<$count; $i++) {
$S = $this->ParseBlock($S, $i);
    }
    return $S;
  }

  //  Parse All Flag
  function ParseAllFlag($S, $No) {
    $count = sizeof($this->spatterns);
    for ($i=0; $i<$count; $i++) {
$S = $this->ParseFlag($S, $No, $i);
    }
    return $S;
  }

  //  Print Html
  function PrintHtml() {
    $this->Parse();
    print $this->S;
  }

  //  Parse Flag
  function ParseFlag($S, $No, $Op) {
    $count = preg_match_all($this->spatterns[$Op][0], $S, $Out);
    for ($i=0; $i<$count; $i++) {
$k = $Out[1][$i];
$v = $Out[2][$i];
if (!empty($k)) {
eval("\$reg =\"".$this->spatterns[$Op][1]."\";");
        switch ($Op) {
          case 0:
            //  Var
            if ($k=="DOC_PATH") $OutText = $this->path;
            else $OutText = $GLOBALS[$k];
            break;
          case 1:
            //  Field
            eval("\$OutText = \$GLOBALS[".$k."]->LINES[".$No."]['".$v."'];");
            break;
          case 2:
            //  Function
            eval("\$OutText = ".$k."(".$v.");");
            break;
          case 3:
            //  Array
            $v = empty($v) ? 0 : str_replace(',', '][', $v);
            eval("\$OutText = \$GLOBALS[".$k."][".$v."];");
            break;
          case 4:
            //  Text Group
            $p = explode(',', trim($v));
            $NEW = new GroupText($GLOBALS[$k], $p);
            $OutText = $NEW->OutText();
            break;
          case 5:
            //  Check Group
            $r = explode(',', $k);
            $NEW = new GroupCheck($GLOBALS[$r[0]], $v, "_".trim($r[1]));
            $OutText = $NEW->OutText();
            break;
          case 6:
            //  Radio Group
            $r = explode(',', $k);
            $NEW = new GroupRadio($GLOBALS[$r[0]], $v, "_".trim($r[1]));
            $OutText = $NEW->OutText();
            break;
          case 7:
            //  Select Text
            $r = explode(',', $k);
            $NEW = new SelectText($GLOBALS[$r[0]], $v, "_".trim($r[1]));
            $OutText = $NEW->OutText();
            break;
          case 8:
            //  Select Num
            $r = explode(',', $k);
            $NEW = new SelectNum($GLOBALS[$r[0]], $v, "_".trim($r[1]));
            $OutText = $NEW->OutText();
            break;
        }
        $S=preg_replace($reg, $OutText, $S);
      }
    }
    return $S;
  }

  //  Parse Block
  function ParseBlock($S, $Op) {
    $count = preg_match_all($this->bpatterns[$Op][0], $S, $Out);
    for ($i=0; $i<$count; $i++) {
$h = $Out[1][$i];
$k = $Out[2][$i];
$v = $Out[3][$i];
if (!empty($v)) {
eval("\$reg =\"".$this->bpatterns[$Op][1]."\";");
        switch ($Op) {
          case 0:
            //  Repeat Block
            $size = $GLOBALS['COUNT'];
            $OutText = "";
            for ($j=0; $j<$size; $j++) {
$OutText .= $this->ParseAllFlag($v, $j);
            }
            break;
          case 1:
            //  Manage Block
            $k = $this->ParseAllFlag($k, 0);
            eval("\$RESULT =".$k.";");
            $OutText = ($RESULT) ? $this->ParseAllFlag($v, 0) : "";
            break;
        }
        $S=preg_replace($reg, $OutText, $S);
      }
    }
    return $S;
  }
}

?>


                            HTML 模版文件应用实例 ( 2000.11.30 )
-------------------------------------------------------------------------------------------

<html>
<head>
<title>HEYIN 社区</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK rel=stylesheet href="{ DOC_PATH }css/main.css">
<SCRIPT SRC="{ DOC_PATH }javascript/switch.js"></SCRIPT>
</head>

<body bgcolor="#FFFFFF" leftmargin=0 topmargin=0>
<table width="95%" border="0" cellspacing="0" cellpadding="0" align="center" class="wdBlack">
  <tr> 
    <td width="30%">
    </td>
    <td width="70%"> 
      <div align="right"><!-- MBEGIN |{ account }=='' --><A href="apply.php" target="_top">申请  <A href="login.php" target="_top">登录  <!-- MEND --><A href="bbs_search.php" target="_top">查找文章  <A href="call.php" target="_top">寻呼  <A href="gbook.php" target="_top">留言  <A href="bbs_priv.php" target="_top">悄悄话  帮助</div>
    </td>
  </tr>
  <tr> 
    <td colspan="2" height="1" bgcolor="#CCCCCC"></td>
  </tr>
</table>
<table width="95%" border="0" cellspacing="0" cellpadding="0" align="center" class="wdBlack">
  <tr> 
    <td height="24" colspan="2"> 
      <div align="center">{ BLOCK.welcome }</div>
    </td>
    <td width="24%"> 
      <div align="right">版主: { BLOCK.sysop }</div>
    </td>
  </tr>
  <tr> 
    <td width="26%"><A href="bbs_add.php">发表文章·精华区·排行榜</td>
    <td width="50%"> 
      <div align="center">文章总数: <font
style="COLOR: #ff2ba1; FONT-SIZE: 9pt">{ TOTAL } [  color=#007025>{ show }/{ TPAGE } 页 ]</div>
    </td>
    <td width="24%"> 
      <div align="right">首页 末页 前页 后页</div>
    </td>
  </tr>
</table>
<table width="95%" border="0" cellspacing="1" cellpadding="2" align="center" class="wdBlack">
  <tr>
    <td bgcolor="#3577FF" width="8%"> 
      <div align="center">星级</div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center">回应</div>
    </td>
    <td bgcolor="#3577FF" width="38%"> 
      <div align="center">主    题</div>
    </td>
    <td bgcolor="#3577FF" width="18%"> 
      <div align="center">作 者</div>
    </td>
    <td bgcolor="#3577FF" width="12%"> 
      <div align="center">时间</div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center">人气</div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center">鲜花</div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center">臭蛋</div>
    </td>
  </tr>
<!-- BEGIN -->
  <tr>
    <td bgcolor="#FFFFFF" width="8%" height="22" align="center">{ PrintStar({ BBS.star }) }
    </td>
    <td bgcolor="#FFFFFF" width="6%" height="22" align="center"><img src="{ DOC_PATH }images/folder1.gif" alt="回帖数:{ BBS.subcount }" width="13" height="16" align="absmiddle">
    </td>
    <td bgcolor="#FFFFFF" width="38%" height="22"><img src="{ DOC_PATH }images/mood{ BBS.mood }.gif" width="15" height="15" align="absmiddle"> <A href="bbs_read.php?_bbsid={ BBS.bbsid }">{ BBS.title }
    </td>
    <td bgcolor="#FFFFFF" width="18%" height="22" align="center">{ BBS.nickname }
    </td>
    <td bgcolor="#FFFFFF" width="12%" height="22">{ date('m.d H:i','{ BBS.writetime }') }
    </td>
    <td bgcolor="#FFFFFF" width="6%" height="22" align="center">{ BBS.readcount }
    </td>
    <td bgcolor="#FFFFFF" width="6%" height="22" align="center">{ PrintCount({ BBS.flower }) }
    </td>
    <td bgcolor="#FFFFFF" width="6%" height="22" align="center">{ PrintCount({ BBS.egg }) }
    </td>
  </tr>
<!-- END -->
  <tr>
    <td bgcolor="#3577FF" width="8%"> 
      <div align="center"> </div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center"></div>
    </td>
    <td bgcolor="#3577FF" width="38%"> 
      <div align="center"></div>
    </td>
    <td bgcolor="#3577FF" width="18%"> 
      <div align="center"></div>
    </td>
    <td bgcolor="#3577FF" width="12%"> 
      <div align="center"></div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center"></div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center"></div>
    </td>
    <td bgcolor="#3577FF" width="6%"> 
      <div align="center"></div>
    </td>
  </tr>
</table>
<table width="95%" border="0" cellspacing="0" cellpadding="0" align="center" class="wdBlack">
  <tr>
    <td width="46%">浏览设置·刷新·折叠/展开·排序·论坛管理</td>
    <td width="54%" align="right">
      <FORM method="post">
跳到第{ SN PAGE,show|{ show } }页
      </FORM>
    </td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center" height="100" class="wdBlack">
  <tr align="center"> 
    <td>Copyright &copy; 2000 heyin.com, All Rights Reserved  HEYIN.COM 版权所有! 
      
 
      <hr width="600" size="1" noshade align="center">
       OICQ: 1235686   EMAIL: [email protected]</td>
  </tr>
</table>
</body>
</html>

[关闭][返回]