Last Edit Date: 06/03/2008
indexのプログラム
rewrite.prgで作成されたprgファイルをrewrite.prgはdo &programnameでprgファイルを実行しindex.htmlページを表示します。
ではindex.prgがどのようにできているかを見ます。
#!/usr/local/aragoi/aragoi.exe index.prg <-この行がファイルの先頭になる Unicesでは先頭にBOMが有るとエラーになる
THISPAGE = "index"
THISPAGETITLE = "Southern Pacific Computer Inc. home page" <-Browserの上部に表示されるタイトル
AUTHOR = "Southern Pacific Computer Inc." <-このプログラムの作者、
WEBURL = "www.soupacific.com" && web url for favicon <-ドメイン名
CGINAME ="akuaku/" <-cgiディレクトリ
MAINMENUTITLE = "SPC main menu" <-このページのメインメニュ名
ADMINNAME = "ADMIN" <-管理者名
ADMINMAIL = "admin@soupacific.com" <-管理者のメイルアドレス
HOMEPAGENAME = "Home Page"
*******ordinary basic setting
SET COMPATIBLE OFF <-お決まりの設定
SET LANGUAGE TO UTF8 <-必ず指定する
SET DATE TO ANSI
SET CENTURY ON
SET DELETE ON <-DELETE ONでDBFを操作する
****Get premade FORM data
LOGIN = GETFORM("LOGIN") <-Formが実行されたときにsubmitボタンLOGINを取得
NAME = GETFORM("username") <-同 usernameを取得
USERIP =GETENV("REMOTE_ADDR") <-セキュリティのための保存
******???language info, we select proper language page from db
REMOTELANG =GETENV("HTTP_ACCEPT_LANGUAGE") <-将来的に言語を調べる
DATE=DATE()
**********pass page info***********
**using this for security, where this call came and also set return page to
toppage = "index" &&top page is named as index.prg <-documentrootでのdefaultのページ名
gparents = GETFORM("parents") <-Formが実行されたときにHiddenで送られる前の前ページ名情報
parents = GETFORM("mypage") <-同 前のページ名
mypage = thispage <-このページ名
***********************************
IF LOGIN = "login" <-submitボタンがloginだったら認証プログラムへ行く
DO auth.prg
RETURN
ENDIF
**open database with index index on pagename lastaccess
USE content INDEX pagename, laccess, topmenu ALIAS maindb <-メインのデータベース
**master index is PAGENAME
**Locate right record
IF .NOT. SEEK(THISPAGE) <-このページに行く 無いと言う事はありえないが念のため
errorだったら
OUTPUT('Content-type: text/html;CHARSET=utf-8 ') <-Apacheのcgiが期待する文字列、ついでにcharsetもおまけ
OUTPUT("",1) <-crlfが2回いる
OUTPUT("",1)
OUTPUT("page not found")
RETURN
ENDIF
*****for giving happiness for Apache 2.x cgi
OUTPUT('Content-type: text/html;CHARSET=utf-8 ') <-Apacheのcgiが期待する文字列、ついでにcharsetもおまけ
OUTPUT("",1)
OUTPUT("",1)
OUTPUT('<html>',2) &&here we need carriage return
OUTPUT("<HEAD>")
OUTPUT('<meta name="Robots" content="All">')
OUTPUT('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">') <-ここでBrowserに文字情報
*****web name, page title set in above
OUTPUT('<meta name="author" content="' + AUTHOR + '">')
OUTPUT('<link rel="SHORTCUT ICON" href="http://' + WEBURL + '/favicon.ico">') <-ここでBrowserに文字情報
OUTPUT("<TITLE>" + THISPAGETITLE + "</TITLE>")
****need to set location for css file and javascript file
OUTPUT('<link rel="stylesheet" type="text/css" href="http://' + WEBURL + '/spcneat.css" />') && for css
link
OUTPUT('<script src="http://' + WEBURL + '/spcneat.js"></script></HEAD>') && for javascript link
**********end of head
OUTPUT('<body class="spc_wiki">')
**Show project name
OUTPUT('<TABLE BORDER="1" CELLSPACING="1" WIDTH="100%" HEIGHT="24"><TR>')
OUTPUT('<TD WIDTH="100%" VALIGN="MIDDLE" BGCOLOR="#FFFF00"><H3 ALIGN="CENTER">ARAGO for Internet Wiki
Project AkuAku</H3></TD></TR></TABLE>')
** define FORM action
OUTPUT('<FORM NAME = "' + THISPAGE + '" ACTION="http://' + WEBURL + '/' + CGINAME + SUBDIR +
'rewrite.prg?' + THISPAGE + '" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">')
*************send parents information
OUTPUT('<INPUT TYPE="HIDDEN" NAME="parents" VALUE="'+ mypage + '">') <-ここでBrowserに文字情報
OUTPUT('<INPUT TYPE="HIDDEN" NAME="mypage" VALUE="'+ mypage + '">') <-プログラムによって異なった値に変更されていることがある
*************
**top site header
OUTPUT('<div id="siteheader">')
*** first header table
output('<div style="padding: 0pt 10px; background-color: rgb(34, 34, 34); color: rgb(255, 255, 255); font
-weight: bold; font-size: 12px;"><b style="float: right; color: rgb(51, 255, 0);">Commercial Software is
ALSO good for you</b>')
OUTPUT('<a href="http://' + WEBURL + '/" style="color: rgb(255, 255, 255); text-decoration:
none;">Southern Pacific Computer Inc. </a> </div></div>')
OUTPUT('<div id="spc-top">This web site is powered by Arago for Internet v7.0 UTF-8 edition on FreeBSD
</div>')
** end header table
OUTPUT('<tbody>') && starting body
**Display as normal page
DO DISPLAYMODE <-メニュー、メイン部分の表示プログラムへ
OUTPUT('</tr></tbody></table></div>')
IF maindb->BOTTOM = .T.
OUTPUT('<div id="spc-bot">')
OUTPUT('<small>' + maindb->BMTXT + '</small></div>') <-BMTXTは一番下に表示さるデータ
ENDIF
OUTPUT('</DIV></FORM></HTML>')
*********end all html process********
***** each procedure starts
*******************************
PROCEDURE LEFTMENU <-左メニューの生成
*******************************
SELECT 2
USE menuorder <-メインメニュー一覧 DBF
I = 0
DO WHILE .NOT. EOF()
I = I + 1
IF .NOT. EOF() .AND. DELETED = .F.
TOPMENU = RTRIM(MENUTITLE)
CNT = LTRIM(STR(I)) && create macro value
TOGGLENAME = "mod-spcMenu&CNT"
IF I = 1
OUTPUT('<td id="leftcolumn" valign="top"> <div class="box box-spcMenu"><div
class="box-title"><table style="width: 174px; height: 19px;" class="box-title">')
OUTPUT('<tbody><tr><td> <span class="box-titletext">'+ TOPMENU + '</span> </td>')
ELSE
OUTPUT('<div class="box box-spcMenu"><div class="box-title"><table style="width:
174px; height: 19px;" class="box-title">')
OUTPUT('<tbody><tr><td> <span class="box-titletext">' + TOPMENU +'</span> </td>')
ENDIF
OUTPUT('<td width="11"><a title="Expand/Fold contents" href="javascript: toggle(' + "'" +
TOGGLENAME + "'" + ');"><img src="http://' + WEBURL + '/tree.jpg" width=12 height=12 border=0
alt="Expand/Fold"></a></td> </tr> </tbody></table> </div>')
OUTPUT('<div id="' + TOGGLENAME + '" style="display: block;" class="box-data">')
OUTPUT('<table><tbody>')
RET = GETLMENU(RTRIM(PAGENAME))
SELECT 2
OUTPUT('</tbody></table></div></div>')
ENDIF
IF .NOT. EOF()
SKIP
ENDIF
ENDDO
OUTPUT('</div></div></div>')
USE
SELECT 1
編集メニューへのログイン画面
OUTPUT('<div class="box box-login_box"><div class="box-title"><table class="box-title">')
OUTPUT('<tbody><tr><td> <span class="box-titletext">Login</span></td>')
OUTPUT('<td width="11"><a title="Members" href="javascript: toggle(' + "'mod-login_box'" + ');"><img
src="http://' + WEBURL + '/tree.jpg" width=12 height=12 border=0 alt="Expand/Fold"> </a> </td>
</tr></tbody></table></div>')
OUTPUT('<div id="mod-login_box" style="display: none;" class="box-data">')
OUTPUT('<table border="0">')
OUTPUT('<tbody><tr><td><table><tbody><tr><td class="module"><label for="login-
user">account:</label></td></tr>')
OUTPUT('<tr><td><input name="account" id="login-user" size="20" type="text" /></td></tr>')
OUTPUT('<tr><td class="module"><label for="login-pass">password:</label></td></tr>')
OUTPUT('<tr><td><input name="password" id="login-pass" size="20" type="password" /></td></tr>')
OUTPUT('<tr><td><input name="login" value="login" type="submit" /></td></tr>')
OUTPUT('<tr><td class="module" valign="bottom"> <a class="linkmodule" href="http://' + WEBURL + '/' +
SUBDIR + 'registration.html" title="Click here to register"> register </a><br> <a class="linkmodule"
href="http://' + WEBURL + '/' + SUBDIR + 'forgot.html" title="Click here if forgotten your
password">forgot password</a></td></tr> </tbody></table></td></tr> </tbody></table>')
OUTPUT('<input name="stay_in_ssl_mode" value="" type="hidden" />')
OUTPUT('</div></div> <br /> </td>')
RETURN
*******************************
*******************************
FUNCTION GETLMENU <-サブメニューの生成
*******************************
PARAMETERS VAL1 && pagename
SELECT 5
USE lmenu <-全てのサブメニュ-のDBF
SKEY = VAL1
IF .NOT. EMPTY(SKEY)
GO TOP
DO WHILE .NOT. EOF()
LOCATE FOR TOPMENU = SKEY REST &&SEEK(SKEY)
IF EOF()
EXIT
ENDIF
IF DELETED = .F. .AND. PRIVATE = .F.
OUTPUT('<tr align="left"><td><a href="http://' + WEBURL + '/' + SUBDIR + FILTER
(RTRIM(pagenameii), "_", "/") +'.html" >' + RTRIM(menu) + '</a></tr></td>')
ENDIF
SKIP
ENDDO
ENDIF
USE
RETURN .T.
*******************************
*******************************
PROCEDURE RIGHTMENU <-右メニューの生成
*******************************
OUTPUT('<td id="rightcolumn" valign="top"><div class="box box-upcoming_events"><div class="box-title">
<table class="box-title"> <tbody> <tr><td><span class="box-titletext">Advertisement</span></td>')
OUTPUT('<td width="11"><a title="Advertisement" href="javascript: toggle(' + "'right_box'" + ');"><img
src="http://' + WEBURL + '/tree.jpg" width=12 height=12 border=0 alt="Expand/Fold"> </a></td>
</tr></tbody> </table></div>')
OUTPUT('<div id="right_box" style="display: block;" class="box-data">' + RMTXT + '</div>')
OUTPUT('</div></tr></tbody></table></div>')
RETURN
*******************************
*******************************
PROCEDURE DISPLAYMODE <-主画面の出力
*******************************
OUTPUT('<div id="spc-mid"><table id="spc-midtbl" border="0" cellpadding="0" cellspacing="0"> ')
IF LEFT = .T.
DO LEFTMENU
ENDIF
OUTPUT(' <td id="centercolumn" valign="top"> <div id="spc-center">')
************************************
&&following are language select TABs <-言語TABの処理
OUTPUT('<div id="tabsI"><ul>')
OUTPUT('<li><a href="http://' + WEBURL + '" title="Link 1"><span>日本語</span></a></li>')
OUTPUT('<li><a href="http://' + WEBURL + '/en/index.html" title="Link 2"><span>English</span></a></li>')
OUTPUT('<li><a href="http://' + WEBURL + '/tch/index.html" title="Link 3"><span>正體</span></a></li>')
OUTPUT('<li><a href="http://' + WEBURL + '/sch/index.html" title="Link 4"><span>简体</span></a></li>')
OUTPUT('</ul></div>')
************************************
OUTPUT('<div style="text-align: right;">Last Edit Date :' + DTOC(LASTMODIFY) + '</div>')
OUTPUT(MMTXT)
IF RIGHT = .T.
DO RIGHTMENU
ENDIF
RETURN
******************************
| Advertisement |
|
|