CGI C用的HTML模板

如果用C写CGI程序,一般的代码就是这个样子:

  #include <stdio.h>
  main()
  {
  printf(″Contenttype:text/html/n/n″);
  printf(″<html>/n″);
  printf(″<head><title>An HTML Page From a CGI</title></head>/n″);
  printf(″<body><br>/n″);
  printf(″<h2> This is an HTML page generated from with i n a CGI program.. .</h2>/n″);
  printf(″</body>/n″);
  printf(″</html>/n″);
  fflush(stdout);
  }

上面的代码把html语句被写死在c程序里面,很难看。以后要修改html,不光美工没法下手,程序员也得亲自重新改写程序,重新编译。

这个html模板就是解决这个问题。

如何使用
怎么使用呢,很简单。比如要显示一个Color表格,第一行是标题Color,后面几行程序生成几个颜色。html编辑要做的事情就是提供一个如下的html文件。

  ===============test.htm===============
  <HTML>
  <HEAD>
  <TITLE></TITLE>
  </HEAD>
  <BODY>
  
  <table>
    <tr>
      <td> {ColumnName} </td>
    </tr>
    
    <!--BeginBlockName-->    
    <tr>
      <td> {ColumnValue} </td>
    </tr>
    <!--EndBlockName-->    
    
  </table>
    
  </BODY>
  </HTML>
      
程序员要做的事情就是写如下的代码:

  ===============test.cgi===============
  HTLoadFile("test.htm");
  HTSetVar("ColumnName", "Color");
  
  HTSetVar("ColumnValue", "Red");
  HTParse("BlockName", 0);
  
  HTSetVar("ColumnValue", "Green");
  HTParse("BlockName", 0);

  HTSetVar("ColumnValue", "Blue");
  HTParse("BlockName", 0);
        
  HTFinish();

程序生成的输出如下所示:

  ===============output===============
  <HTML>
  <HEAD>
  <TITLE></TITLE>
  </HEAD>
  <BODY>

  <table>
    <tr>
      <td> Color </td>
    </tr>

    <tr>
      <td> Red </td>
    </tr>
    <tr>
      <td> Green </td>
    </tr>
    <tr>
      <td> Blue </td>
    </tr>

  </table>

  </BODY>
  </HTML>

关键字
变量
变量定义的语法是
{variable}
用{}把变量名括起来。
注意:变量区分大小写,名字字符不得超过32个字符长,并且支持空格。

合法的变量定义形式有:
{name}, {Name}, {NAME}, {my name}, { my name }, {$$my name##}等等。注意{my name}, { my name }是两个不同的变量名,因为第二个前后有空格。

非法的变量定义:
{na{me}, {nam}e}, {n<!--ame}

推荐的命名格式为
{name}, {Name}, {MyName}之类,注意大小写,尽量不要有空格,或者其他特殊字符。
变量的用法
比如上面例子里有{ColumnValue}这个变量,最开始这个变量的值是NULL,调用HTSetVar("ColumnValue", "Red");后这个变量的值就是Red,输出的时候,该变量将被替换为Red。

然后HTSetVar("ColumnValue", "Green");再次改变这个变量的值为Green,输出的时候,该变量将被替换为Green。

注意:变量的值不限制长度。

块定义的语法是
<!--BeginBlockName-->
.........
<!--EndBlockName-->
其中BlockName是块名,Begin和End的首字符一定要大写,建议不要有空格或者其他特殊字符。

注意:与变量不同,一个块仅能在模板中定义一次。
块的用法
模板库把html文件视为一个顶级的无名块,块可以嵌套。每个块在html中都仅仅是形式定义,只有调用HTParse才会实例化。

比如

<!--BeginBlockName-->    
    <tr>
      <td> {ColumnValue} </td>
    </tr>
<!--EndBlockName-->    

这个块定义,如果HTParse("BlockName", 0)这个函数从来没有被调用过,那么最后输出这个块定义处将是空白。

下面调用

HTSetVar("ColumnValue", "Red");
HTParse("BlockName", 0);

这两个函数,其中HTParse的第二个参数表示,如果该块被输出多次,0表示按照先调用先输出的原则,1表示先调用后输出。

那么这个块将会实例化为

<tr>
      <td> Red </td>
</tr>

再调用

HTSetVar("ColumnValue", "Green");
HTParse("BlockName", 0);
又被实例化一次,为
<tr>
      <td> Green</td>
</tr>

以上的例子最终按顺序显示Red, Green, Blue,如果第二个参数为1,那么最终显示为Blue, Gree, Red。

接口
int  HTLoadFile(char* File);
函数加载html模板文件,File指向文件名。文件不得超过32K大小。

void HTSetVar(char* Name, char* Value);
函数改变模板中所有名字为Name的变量的值为Value,不管该变量原来的值是什么。

void HTParse(char* Name, int ReverseFlag);
函数实例化名字为Name的块,ReverseFlag控制顺序输出还是反序输出。

void HTFinish();
输出文件,并释放资源。
顺便介绍CGL
CGL是一个很轻量级的CGI C库,提供了一些接口,让用户能很容易的操作动态网页,比如读取Session, Get, Post等变量。 
1:全能的HTML输出 2:全部模板化输出(可以更好的结合自已的主页) 3:可自定议文件名及文件扩展名 4:仿新浪新闻的目录存入方式(让你感到有面子) 5:管理中心非法登陆自动记录(可以在线清空记录) 6:方便的搜索方式(搜索代码加到任何一个网页都会自动更新类别显示) 7:在线添加类别,修改类别(同时可以选择类别模板和修改已选好的类别模板); 8:在线添加新闻; 9:可以设定图片新闻(可设定显示数及图片的宽和高) 10:可以设定焦点新闻(可设定显示数) 11:自动记录最新新闻(可设定显示数) 12:自动记录相关新闻(可设定显示数) 13:WM标签让你在加新闻时得心应手 14:在线修改新闻(修改后自动更新相关页面); 15:在线删除新闻 16:在线批量删除新闻(可以同时删除一天,一月,一年的新闻) 17:自由上传图片及FLASH 18:可设定上传文件的最大字节数 19:在线删除上传的图片及FLASH 20:管理员可设定多位用户管理新闻 21:在线增加或删除用户 22:用户发表的新闻可以自已删除和修改 23:一位用户可以管理多个类别 24:一个类别可以由多位用户管理(且只能删除和修改自已发的新闻) 25:投稿功能 26:在线管理投稿箱 27:可以对投稿者自动发信回信(该功能可以设定开或关) 28:自动检查新闻内容里是否有图片(有则在标题后加标志) 29:标题后面的图片标志可自设 30:标题前面的标志可以自设 31:在调用总类别的新闻时可以设定是否显示所在分类别 32:可以设定调用新闻时的标题字节数 33:Server(服务器)时区调整 34:可设定每页显示标题数 35:可以设定在标题后的时间显示方式或不显示时间 36:在线修改程序变量 功能预告: 在线管理模板 多功能详细的搜索新闻 在线评论 在线邮件推荐新闻 在线手机短信推荐新闻 ########################################################################################## 按装说明 1:打开压缩包,有CGI-BIN,NON-CGI,及本说明文件,CGI-BIN和NON-CGI里面的目录和文件请不要改名。 2:查看install.cgi,admin.cgi,serach,wmnewsupfile.cgi文件的第一行Perl 解释器路(#!/usr/bin/perl),如果跟你服务器的不相同请修改(一般情况下不用修改的.) 3:按提供时的目录上传所有的目录及文件,主要是CGI-BIN和NON-CGI这两个目录要全部上传,所有CGI和PL文件一定要用ASCii方式上传到CGI-BIN目录里;而非 CGI 文件(图片)要用 Binary 方式上传;建议采用CUTEFTP上传所有文件。 4:上传完所有文件和目录后请修改CGI-BIN里的所有目录属为777,CGI和PL文件的属性为755,NON-CGI目录为777,如果你使用的是 Windows 类服务器,那么无需做任何属性的设置。 5:在浏览器里打开install.cgi程序安装向导,安照提示进行安装。 6:进入管理中心在"程序变量管理"查看其它功能,按照自己的要求修改后保存。 7:添加了类别后就可以发表新闻了。 ps:如果主机是NT类的话,在安装不成功的情况下打开*.cgi文件在说明要改绝对路径的地方修改成你服务器的绝对路径! ########################################################################################## 增加模板时请注意:由于大家要得急,暂时在管理中心没有完成这个功能,这就要求大家在增加模板时注意以下几个方面; 1:模板的扩展名一定得是.html 2:模板主名可以是任意的(英文,汉字都可以) 3:一定要传到相应的目录里,(list:是类别模板;news:是新闻显示时的模板;) 4:搜索模板只能是一个,而且不能改名,一定要记得噢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值