Linux上ClearSilver的使用入门
狄凯
2023-12-01
1. 安装
#cd /usr/local/src
#tar xzvf clearsilver-0.10.4.tar.gz
#cd clearsilver-0.10.4
#./configure --disable-apache --enable-gettext
#make install
注: --disable-apache为不产生apache1.x用的模块
,--enable-gettext为多语言对应用选项。
2.功能要求:
在一个列举区域名字(从数据库取得的信息做成)的页面A上,
选择某一个执行更新,即从该页面A跳转到页面B上,
页面信息更新完毕后,点确定按钮执行,跳转到更新成功与否画面。
3. CGI文件做成 changearea.cgi
#include <stdio.h>
#include <string.h>
#include <ClearSilver.h>
#include "libEmsMng.h"
#include "emsCgi.h"
#define CGI_NAME "changearea.cgi" // 自身のCGI名前
#define CGI_RET "getarea.cgi" // リターン画面CGI
#define TEMPLATE_GET AMS_SHARE "changearea.cst" // 編集画面用テンプレート
#define TEMPLATE_FORWARD AMS_SHARE "result.cst" // 結果画面用テンプレート
int main(void)
{
NEOERR *err;
CGI *cgi;
char *template_file = TEMPLATE_GET;
if(cgi_init(&cgi, NULL) != STATUS_OK){
return ERROR;
}
//zzz
FILE *fp = fopen("/var/test.log", "w");
char *method = hdf_get_value(cgi->hdf, "CGI.RequestMethod", "GET");
//zz
fprintf(fp, "------method = %s-------\n", method);
/* 一回目エリア編集画面表示 */
if(strcmp(method, "GET") == 0){
char *areaNoStr = hdf_get_value(cgi->hdf, "Query.areaNo", "");
char *areaName = hdf_get_value(cgi->hdf, "Query.areaName", "");
hdf_set_value(cgi->hdf, "area.no", areaNoStr);
hdf_set_value(cgi->hdf, "area.name", areaName);
}else if(strcmp(method, "POST") == 0){
/* 編集成功か表示画面を設定 */
template_file = TEMPLATE_FORWARD;
const char *message = "CGIエラー";
if(cgi_parse(cgi) == STATUS_OK){
char *areaNoChngStr = hdf_get_value(cgi->hdf, "Query.areanochng", "");
char *areaNameChng = hdf_get_value(cgi->hdf, "Query.areanamechng", "");
//zzz
fprintf(fp, "areanochng = %s\n", areaNoChngStr);
fprintf(fp, "areanamechng = %s\n", areaNameChng);
if((strlen(areaNoChngStr) != 0) && (strlen(areaNameChng) != 0)){
if(startEmsMng() == OK){
if(changeArea(atol(areaNoChngStr), areaNameChng) == OK){
message = "エリア情報編集成功";
}else{
message = "エリア情報編集失敗";
}
endEmsMng();
}else{
message = "エリア情報編集失敗";
}
}
}
/* エリア編集結果情報を設定 */
hdf_set_value(cgi->hdf, "message", message);
}
hdf_set_value(cgi->hdf, "return_url", CGI_RET);
hdf_set_value(cgi->hdf, "Config.NoCache", "1");
err = cgi_display(cgi, template_file);
if(err != STATUS_OK){
cgi_neo_error(cgi, err);
}
cgi_destroy(&cgi);
return OK;
}
2. 模板文件做成 changearea.cst(部分)
<SCRIPT LANGUAGE="JavaScript">
<!--
function changeAreaFunc(){
document.form1.submit();
return true;
}
//-->
</SCRIPT>
<form name="form1" method="post" action="changearea.cgi">
<input type="hidden" name="dummy" value="dummy" />
<input type="hidden" name="areanochng" value="<?cs var:area.no ?>" />
<input type="text" name="areanamechng" size="30" maxlength="80" value="<?cs var:area.name ?>" />
<a href="JavaScript:changeAreaFunc()"><img src="./zz.gif“ alt="確定"></a>