4D v14.34D HTMLタグ |
|||||||||||||||||||||||||||||||||||||||
|
4D v14.3
4D HTMLタグ
4D HTMLタグ
4D Webサーバーは、WEB SEND FILEやWEB SEND BLOBコマンドを使用して、Webサーバーから送信されるスタティックなHTMLページに4D変数や式、あるいは様々なタイプの処理への参照を挿入することを可能にする、4D専用のHTMLタグを提供しています。このようなページはセミダイナミックページと呼ばれます。 これらのタグはHTMLコメントとして挿入されます (<!--#Tag Contents-->)。多くのHTMLエディターがコメントの挿入機能を持っています。 以下の4Dタグを使用できます:
4Dが送信するセミダイナミックページの内容解析は、WEB SEND FILE (.htm, .html, .shtm, .shtml) または WEB SEND BLOB (text/html タイプのBLOB) コマンドが呼び出された時、またはWEB SEND TEXTコマンドが呼び出されたとき、さらにはURLを使用してページが呼び出されたときに発生します。 内部的に、パーサーはUTF-16で動作します。しかし、解析するデータは異なるコード体系かもしれません。タグ(例えば4DHTML)を含むテキストであるときや、文字セットが明示的に指定されているようなときには、4Dは必要に応じてデータを変換します。
4Dに処理を行わせるには、HTMLコメントは <!--#4D...--> のフォーマットで記述します。HTMLエディターによっては自動で他の情報をコメントに書き込むことがあることに留意してください。これは動作しないなどの問題を引き起こすことがあります。 コメント <!--#4D... が -->で終了していない場合、メッセージ “<!--#4D... : --> が必要です” が挿入され、このレベルで解析が停止します (エラーを示すため、ページが送信される)。 <HTML> ... <BODY> <!--#4DSCRIPT/PRE_PROCESS--> (メソッド呼び出し) <!--#4DIF myvar=1--> (If 条件) <!--#4DINCLUDE banner1.html--> (サブページ挿入) <!--#4DENDIF--> (End if) <!--#4DIF myvar=2--> <!--#4DINCLUDE banner2.html--> <!--#4DENDIF--> <!--#4DLOOP [テーブル]--> (カレントセレクションに基づくループ) <!--#4DIF [テーブル]ValNum>10--> (If [テーブル]ValNum>10) <!--#4DINCLUDE subpage.html--> (サブページ挿入) <!--#4DELSE--> (Else) <B>Value: <!--#4DTEXT [テーブル]ValNum--></B><BR> (フィールド表示) <!--#4DENDIF--> <!--#4DENDLOOP--> (End for) </BODY> </HTML> シンタックス: <!--#4DTEXT VarName--> または <!--#4DTEXT 4DExpression-->
タグ <!--#4DTEXT VarName--> を使用して4D変数や式への参照 VarName をHTMLページの任意の場所に挿入します。例えば以下のように記述すると: <P>Welcome to <!--#4DTEXT vtSiteName-->!</P>4D変数 vtSiteName の値がHTMLページに送信時に挿入されます。値はテキストとして挿入されます。">"のようなHTMLの特殊文字は、自動的にエスケープされます。 4DTEXT タグを使用して、変数だけでなく4D式も挿入できます。フィールドの値を直接挿入できますし (例 <!--#4DTEXT [tableName]fieldName-->) 、または配列要素の値も挿入できますし (例 <!--#4DTEXT tabarr{1}-->) 、値を返すメソッドも使用できます (<!--#4DTEXT mymethod-->)。 式の変換は変数のそれと同じルールが適用されます。さらに式は4Dのシンタックスルールに適合していなければなりません。 注: 4DTEXT での4Dメソッドの実行は、メソッドプロパティの“4DHTMLタグとURL (4DACTION) で利用可能”属性の設定に基づきます。詳細は 接続セキュリティ を参照してください。 式に4D関数への呼び出しを直接含めることができますが、これはローカライズの観点から推奨されません。例えば <!--#4DTEXT Current date--> は英語バージョンの4Dでは正しく解釈されますが、フランス語バージョンの4Dでは解釈されません。同じことが実数値にも言えます (小数点は言語により異なります)。どちらの場合にもプログラムを使用して変数値を割り当てることを強くお勧めします。 解釈エラーの場合、“<!--#4DTEXT myvar--> : ## error # error code” のように表示されます。
注:
互換性に関する注意: 4D v12.2より、4DVARタグは4DTEXTタグに置き換えられます。4DVARタグは以前のバージョンと同様に動作しますが、テキストの挿入には 4DTEXTタグを使用することを強く推奨します。既存のプロジェクトもすべて4DTEXTに置き換えてください。 シンタックス: <!--#4DHTML VarName--> または <!--#4DHTML 4DExpression--> この4DHTMLタグを使用すると、変数や4D式の値をHTMLソースとしてページに挿入できます。4DTEXTとは異なり、このタグはHTML特殊文字をエスケープしません。 例えば4Dのテキスト変数myVarを4Dタグを使用して挿入した結果は以下の様になります:
解釈エラーの場合、“<!--#4DHTML myvar--> : ## エラー # エラーコード”のように表示されます。 注: 4DHTMLでの4Dメソッドの実行は、メソッドプロパティの“4D HTMLタグおよびURL (4DACTION) で利用可能”属性の設定に基づきます。詳細は 接続セキュリティ を参照してください。 互換性に関する注意: 4D v12.2より、4DHTMLVARタグは4DHTMLタグに置き換えられます。4DHTMLVARタグは以前のバージョンと同様に動作しますが、可読性向上のために、HTMLコード挿入には4DHTMLタグを使用することを推奨します。 シンタックス: <!--#4DSCRIPT/MethodName/MyParam--> 4DSCRIPT タグを使用して、スタティックなHTMLページを送信する際に4Dメソッドを実行することを可能にします。<!--#4DSCRIPT/MyMethod/MyParam--> タグがHTMLコメントとしてページに現れると、MyMethodメソッドが$1引数にMyParamを受け取って実行されます。Webページをロードする際、4Dは On Web Authenticationデータベースメソッド を (存在すれば) 呼び出します。このメソッドがTrueを返すと、4Dはメソッドを実行します。
ページ内容の解析は WEB SEND FILE (.htm, .html, .shtm, .shtml)、または WEB SEND BLOB (text/htmlタイプのBLOB) が呼び出されたときに行われます。 またURLが“.shtm” や “.shtml”拡張子のファイルを指しているときにも解析が行われます (例えば http://www.server.com/dir/page.shtm)。 例えば、以下のコメントをスタティックページに挿入したとしましょう “Today is <!--#4DSCRIPT/MYMETH/MYPARAM-->” 。ページをロードする際、4Dは On Web Authenticationデータベースメソッド を (存在すれば) 呼び出し、そして MYMETH メソッドの$1引数に文字列 “/MYPARAM” を渡して呼び出します。 メソッドは$0にテキストを返します (例えば “10/12/31”)。コメント “Today is <!--#4DSCRIPT/MYMETH/MYPARAM-->” は結果 “Today is 10/12/31” となります。 MYMETHメソッドは以下のとおりです: C_TEXT($0)\\This parameter must always be declared 警告: $0 と $1 引数を宣言しなければなりません。 注: 4DSCRIPTから呼び出されるメソッドはインタフェース要素 (DIALOG, ALERT...) を呼び出してはいけません。 4Dはメソッドを見つけた順に実行するので、ドキュメント中で離れて参照される変数の値を設定するメソッドを呼び出すことも可能です。モードは関係ありません。 注: スタティックページに必要なだけ <!--#4DSCRIPT...--> コメントを記述できます。 シンタックス: <!--#4DINCLUDE Path--> <!--#4DINCLUDE --> コメントは、テスト (<!--#4DIF-->) やループ (<!--#4DLOOP-->) と使用するととても便利です。条件に基づきあるいはランダムにタグを含める便利な方法です。 <!--#4DINCLUDE --> コメントで挿入されたページはロードされ、URLで呼ばれてWEB SEND FILEコマンドで送信されたファイルと同じように、Webサーバーキャッシュに格納されます。 pathには、含めるドキュメントへのパスを記述します。 警告: 4DINCLUDE呼び出しの場合、パスは解析される親ドキュメントからの相対パスです。フォルダ区切り文字にはスラッシュ (/) を使用し、レベルをさかのぼるには2つのドットを使用します (HTMLシンタックス)。 注:
さらに、4Dは組み込み呼び出しが再帰的でないか確認します。 エラーの場合、“<!--#4DINCLUDE path--> : ドキュメントを開けません”のように表示されます。 例題
シンタックス: <!--#4DBASE folderPath--> <!--#4DBASE --> タグは<!--#4DINCLUDE-->タグで使用されるワーキングディレクトリを指定します。 folderPath 引数には現在のページに対する相対パスを指定し、パスは"/"で終わっていなければなりません。指定するフォルダーはWebフォルダー内になければなりません。 4D v12では以下のように各呼び出しごとに相対パスをしていなければなりませんでした: <!--#4DINCLUDE subpage.html--> <!--#4DINCLUDE folder/subpage1.html--> <!--#4DINCLUDE folder/subpage2.html--> <!--#4DINCLUDE folder/subpage3.html--> <!--#4DINCLUDE ../folder/subpage.html--> <!--#4DBASE --> タグを使用すれば以下のように記述できます: <!--#4DINCLUDE subpage.html--> <!--#4DBASE folder/--> <!--#4DINCLUDE subpage1.html--> <!--#4DINCLUDE subpage2.html--> <!--#4DINCLUDE subpage3.html--> <!--#4DBASE ../folder/--> <!--#4DINCLUDE subpage.html--> <!--#4DBASE WEBFOLDER--> <!--#4DBASE --> タグを使用してホームページのディレクトリを設定する: /* Index.html */ <!--#4DIF LangFR=True--> <!--#4DBASE FR/--> <!--#4DELSE--> <!--#4DBASE US/--> <!--#4DENDIF--> <!--#4DINCLUDE head.html--> <!--#4DINCLUDE body.html--> <!--#4DINCLUDE footer.html--> head.html ファイル内でカレントフォルダーが<!--#4DBASE -->を使用して変更されているが、index.html内では変更されない: /* Head.htm */ /* ここでのワーキングディレクトリはインクルードされるファイルに対して相対的 (FR/ または US/) */ <!--#4DBASE Styles/--> <!--#4DINCLUDE main.css--> <!--#4DINCLUDE product.css--> <!--#4DBASE Scripts/--> <!--#4DINCLUDE main.js--> <!--#4DINCLUDE product.js--> シンタックス: <!--#4DIF expression--> {<!--#4DELSEIF expression2-->...<!--#4DELSEIF expressionN-->} {<!--#4DELSE-->} <!--#4DENDIF--> expression 引数はブール値を返す有効な4D式です。式は括弧の中に記述され、4Dのシンタックスルールに準拠していなければなりません。 <!--#4DIF expression--> ... <!--#4DENDIF--> を複数レベルでネストできます。4Dのようにそれぞれの <!--#4DIF expression--> は <!--#4DENDIF-->とマッチしなければなりません。 解釈エラーの場合、<!--#4DIF --> と <!--#4DENDIF-->“の間のコンテンツの代わりに、<!--#4DIF expression-->: ブール式が必要です”が挿入されます。 同様に、<!--#4DIF -->が同じ数の<!--#4DENDIF-->で閉じられていない場合、“<!--#4DIF expression-->: 4DENDIFが必要です” が<!--#4DIF --> と <!--#4DENDIF-->の間のコンテンツの代わりに挿入されます。 <!--#4DELSEIF--> タグを使用すると、条件テストの記述が容易になります。最初にTrueと判定されたブロック内にあるコードだけが実行されます。Trueブロックがない場合、文は実行されません (<!--#4DELSE-->がなければ)。 以下の2つのコードは同等です
スタティックなHTMLページに書かれたこの例題のコードは、vname#"" 式の結果に応じ、異なるラベルを表示します: <BODY> ... <!--#4DIF vname#""--> Names starting with <!--#4DVAR vname-->. <!--#4DELSE--> No name has been found. <!--#4DENDIF--> ... </BODY> この例題は接続したユーザーに基づき異なるページを返します: <!--#4DIF LoggedIn=False--> <!--#4DINCLUDE Login.htm --> <!--#4DELSEIF User="Admin"--> <!--#4DINCLUDE AdminPanel.htm --> <!--#4DELSEIF User="Manager"--> <!--#4DINCLUDE SalesDashboard.htm --> <!--#4DELSE--> <!--#4DINCLUDE ItemList.htm --> <!--#4DENDIF--> シンタックス: <!--#4DLOOP condition--> <!--#4DENDLOOP--> <!--#4DLOOP condition--> ... <!--#4DENDLOOP--> ブロックはネストできます。4Dと同様、それぞれの<!--#4DLOOP condition--> は同じ数の <!--#4DENDLOOP-->で閉じられていなければなりません。 条件には3種類あります: 注: 4DLOOPタグがテーブルを条件として使用されると、レコードが読み込みのみでロードされます。 以下のHTMLコードは: <!--#4DLOOP [People]--> <!--#4DTEXT [People]Name--> <!--#4DTEXT [People]Surname--><BR> <!--#4DENDLOOP--> 4Dランゲージで表すと以下のとおりです: FIRST RECORD([People])
注: このシンタックスで二次元配列を使用することはできません。この場合、ネストしたループでメソッドを条件に使用します。 以下のHTMLコードは: <!--#4DLOOP arr_names--> <!--#4DTEXT arr_names{arr_names}--><BR> <!--#4DENDLOOP--> 4Dランゲージで表すと以下のとおりです: For($Elem;1;Size of array(arr_names)) セキュリティのため、On Web Authenticationデータベースメソッドが初期化ステージ (引数に0が渡されて実行される) の前に一度呼び出されます。認証されると、初期化に進みます。 警告: コンパイルのため、C_BOOLEAN($0) とC_LONGINT($1) が宣言されていなければなりません。 例題以下のHTMLコードは: <!--#4DLOOP my_method--> <!--#4DTEXT var--> <BR> <!--#4DENDLOOP--> 4Dランゲージで表すと以下のとおりです: If(AuthenticationWebOK) my_method は以下のようになります: C_LONGINT($1) 解釈エラーの場合、“<!--#4DLOOP expression-->: エラーの説明” が<!--#4DLOOP --> と <!--#4DENDLOOP-->の間のコンテンツの代わりに挿入されます。 |
プロパティ
プロダクト: 4D 参照
4DオブジェクトをHTMLオブジェクトにバインドする タグ 4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP, 4DELSEIF ARTICLE USAGE
ランゲージリファレンス ( 4D v14 R2) Inherited from :
4D HTMLタグ ( 4D v12.4) |
|||||||||||||||||||||||||||||||||||||