4D v12.4

4D HTMLタグ

ホーム

 
4D v12.4
4D HTMLタグ

 

4D HTMLタグ  


 

 

4D Webサーバーは、SEND HTML FILESEND HTML BLOBコマンドを使用して、Webサーバーから送信されるスタティックなHTMLページに4D変数や式、あるいは様々なタイプの処理への参照を挿入することを可能にする、4D専用のHTMLタグを提供しています。このようなページはセミダイナミックページと呼ばれます。

これらのタグはHTMLコメントとして挿入されます (<!--#Tag Contents-->)。多くのHTMLエディターがコメントの挿入機能を持っています。

以下の4D HTMLタグを使用できます:

  • 4DTEXT: 4D変数や4D式を挿入する為に使用します。
  • 4DHTML: HTMLコードを挿入するために使用します。
  • 4DSCRIPT: 指定された4Dメソッドを実行します。またメソッドの戻り値を挿入します。
  • 4DINCLUDE: ページに他のページを挿入するために使用します。
  • 4DIF, 4DELSE そして 4DENDIF: HTMLコードに条件分岐を挿入するために使用します。
  • 4DLOOP と 4DENDLOOP: HTMLコードでループを行うために使用します。

4Dが送信するセミダイナミックページの内容解析は、SEND HTML FILE (.htm, .html, .shtm, .shtml) または SEND HTML BLOB (text/html タイプのBLOB) コマンドが呼び出された時、またはSEND HTML TEXTコマンドが呼び出されたとき、さらにはURLを使用してページが呼び出されたときに発生します。
しかし最後のケースでは、最適化の目的で、“.htm” と “.html” 拡張子を持つページは解析されません。この場合ページの解析を強制的に行うには、拡張子を “.shtm” または “.shtml” (例えば http://www.server.com/dir/page.shtm) にします。
このタイプのページの例題はWEB CACHE STATISTICSコマンドの説明にあります。

WebブラウザーにHTMLページが送信される際に、4Dがタグを解析するケースを以下の表にまとめます:

送信条件 送信ページの内容解析
ページの拡張子 (通常ケース):
.htm, .html, .shtm, .shtml (HTMLページ)
.xml, .xsl (XMLページ)
.wml (WMLページ)
URLで呼び出されたページ○, 拡張子が“.htm” または “.html” のページを除く
SEND HTML FILE コマンド呼び出し
SEND HTML TEXT コマンド呼び出し
SEND HTML BLOB コマンド呼び出し(BLOBが“text/html”型の場合)
<!--4DINCLUDE --> タグによる挿入

4Dに処理を行わせるには、HTMLコメントは <!--#4D...--> のフォーマットで記述します。HTMLエディターによっては自動で他の情報をコメントに書き込むことがあることに留意してください。これは動作しないなどの問題を引き起こすことがあります。
しかし他の <!--Beginning of list--> などのHTMLコメントは使用できます。

コメント <!--#4D... が -->で終了していない場合、メッセージ “<!--#4D... : --> が必要です” が挿入され、このレベルで解析が停止します (エラーを示すため、ページが送信される)。
複数のタイプのコメントをミックスできます。例えば以下のHTMLシンタックスが可能です:

<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  

シンタックス: <!--#4DTEXT VarName--> または <!--#4DTEXT 4DExpression-->

タグ <!--#4DTEXT VarName--> を使用して4D変数や式への参照をHTMLページの任意の場所に挿入します。例えば以下のように記述すると:
<P>Welcome to <!--#4DTEXT vtSiteName-->!</P>
4D変数 vtSiteName の値がHTMLページに挿入されます。
値はテキストとして挿入されます。

4DTEXTタグを使用して、変数だけでなく4D式も挿入できます。フィールドの値を直接挿入できますし (例 <!--#4DTEXT [tableName]fieldName-->) 、または配列要素の値も挿入できますし (例 <!--#4DTEXT arr{1}-->) 、値を返すメソッドも使用できます (<!--#4DTEXT mymethod()-->)。
式の変換は変数のそれと同じルールが適用されます。さらに式は4Dのシンタックスルールに適合していなければなりません。

: 4DTEXTでの4Dメソッドの実行は、メソッドプロパティの“4DHTMLタグとURL (4DACTION) で利用可能”属性の設定に基づきます。詳細は接続セキュリティを参照してください。

式に4D関数への呼び出しを直接含めることができますが、これはお勧めしません。例えば <!--#4DTEXT Current date--> は英語バージョンの4Dでは正しく解釈されますが、フランス語バージョンの4Dでは解釈されません。同じことが実数値にも言えます (小数点は言語により異なります)。プログラムを使用して変数値を割り当てることを強くお勧めします。
解釈エラーの場合、“<!--#4DTEXT myvar--> : ## error # error code”のように表示されます。

注:

  • プロセス変数を使用できます。
  • ピクチャ-ーフィールドの内容を表示できます。しかしピクチャー配列の項目内容を表示することはできません。
  • HTMLはワープロ志向のアプリケーションなので、通常テキスト変数を使用します。しかしBLOB変数を使用することもできます。この場合長さ情報なしのテキストBLOBを使用します。
互換性に関する注意: 4D v12.2より、4DVARタグは4DTEXTタグに置き換えられます。4DVARタグは以前のバージョンと同様に動作しますが、テキストの挿入には4DTEXTタグを使用することを強く推奨します。既存のプロジェクトもすべて4DTEXTに置き換えてください。

4DHTML  

シンタックス: <!--#4DHTML VarName--> または <!--#4DHTML 4DExpression-->

4DHTMLタグを使用すると、変数や4D式の値をHTMLソースとしてページに挿入できます。4DTEXTと異なる点は値がHTMLソースとして挿入されることです。

例えば4Dのテキスト変数myVarを4Dタグを使用して挿入した結果は以下のようになります:

myvar 値タグWebページに挿入されるテキスト
myvar:="<B>"<!--#4DTEXT myvar-->&lt;B&gt;
myvar:="<B>"<!--#4DHTML myvar--><B>
解釈エラーの場合、“<!--#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はメソッドを実行します。
メソッドは$0にテキストを返します。文字列がコード1から始まっていると、それは HTMLソースとして扱われます (変数のときと同じ原則)。

注: 4DSCRIPTでの4Dメソッドの実行は、メソッドプロパティの“4D HTMLタグおよびURL (4DACTION) で利用可能”属性の設定に基づきます。詳細は接続セキュリティを参照してください。

ページ内容の解析はSEND HTML FILE (.htm, .html, .shtm, .shtml)、SEND HTML BLOB (text/htmlタイプのBLOB) 、またはSEND HTML TEXTが呼び出されたときに行われます。 また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($1;$0`この引数を常に宣言する
 $0:=String(Current date)

警告: $0$1 引数を宣言しなければなりません。

注: 4DSCRIPTから呼び出されるメソッドはインタフェース要素 (DIALOG, ALERT...) を呼び出してはいけません。

4Dはメソッドを見つけた順に実行するので、ドキュメント中で離れて参照される変数の値を設定するメソッドを呼び出すことも可能です。モードは関係ありません。

注: スタティックページに必要なだけ <!--#4DSCRIPT...--> コメントを記述できます。

シンタックス: <!--#4DINCLUDE Path-->

このコメントを使用して、(path引数で指定された) 他のHTMLページを、これから送信するHTMLに含めることができます。デフォルトでHTMLのボディー部、つまり<body> と</body>タグの間の内容だけが統合されます (bodyタグは含められません)。これによりヘッダーに含まれるメタタグ関連の衝突が回避されます。しかしpathで指定されたHTML中に<body></body>タグが含まれない場合、ページ全体が統合されます。この場合メタタグの整合性を管理するのは開発者の役割です。

<!--#4DINCLUDE --> コメントは、テスト (<!--#4DIF-->) やループ (<!--#4DLOOP-->) と使用するととても便利です。条件に基づきあるいはランダムにタグを含める便利な方法です。
このタグを使用してページをインクルードするとき、拡張子にかかわらず、4Dは呼び出されたページを解析してから、内容を4DINCLUDE呼び出し元のページに挿入します。

<!--#4DINCLUDE --> コメントで挿入されたページはロードされ、URLで呼ばれてSEND HTML FILE コマンドで送信されたファイルと同じように、Webサーバキャッシュに格納されます。

pathには、含めるドキュメントへのパスを記述します。

Note: PROCESS HTML TAGS コマンドで4DINCLUDEタグを使用する場合、デフォルトフォルダはデータベースストラクチャを含むフォルダです。

警告: 4DINCLUDE呼び出しの場合、パスは解析される親ドキュメントからの相対パスです。フォルダ区切り文字にはスラッシュ (/) を使用し、レベルをさかのぼるには2つのドットを使用します (HTMLシンタックス)。

ページ内の<!--#4DINCLUDE path-->数に制限はありません。しかし<!--#4DINCLUDE path-->の呼び出しは1レベルのみ有効です。つまり、例えばmydoc1.html内の<!--#4DINCLUDE mydoc2.html-->で呼ばれるmydoc2.htmlページのボディに、<!--#4DINCLUDE mydoc3.html--> を含めることはできません。
さらに、4Dは組み込み呼び出しが再帰的でないか確認します。

エラーの場合、“<!--#4DINCLUDE path--> : ドキュメントを開けません”のように表示されます。

例題

<!--#4DINCLUDE subpage.html-->
<!--#4DINCLUDE folder/subpage.html-->
<!--#4DINCLUDE ../folder/subpage.html-->

シンタックス: <!--#4DIF expression--> <!--#4DELSE--> <!--#4DENDIF-->

<!--#4DELSE--> (オプション) と <!--#4DENDIF--> コメントと共に使用することで、<!--#4DIF expression--> コメントはHTMLコードに条件分岐を実行させることを可能にします。
expression 引数はブール値を返す有効な4D式です。式は括弧の中に記述され、4Dのシンタックスルールに準拠していなければなりません。

<!--#4DIF expression--> ... <!--#4DENDIF--> を複数レベルでネストできます。4Dのようにそれぞれの <!--#4DIF expression--><!--#4DENDIF-->とマッチしなければなりません。

解釈エラーの場合、<!--#4DIF --><!--#4DENDIF-->“の間のコンテンツの代わりに、<!--#4DIF expression-->: ブール式が必要です”が挿入されます。

同様に、<!--#4DIF -->が同じ数の<!--#4DENDIF-->で閉じられていない場合、“<!--#4DIF expression-->: 4DENDIFが必要です” が<!--#4DIF --><!--#4DENDIF-->の間のコンテンツの代わりに挿入されます。

例題  

スタティックなHTMLページに書かれたこの例題のコードは、vname#"" 式の結果に応じ、異なるラベルを表示します:

<BODY>
...
<!--#4DIF vname#""-->
Names starting with <!--#4DVAR vname-->.
<!--#4DELSE-->
No name has been found.
<!--#4DENDIF-->
...
</BODY>

シンタックス: <!--#4DLOOP condition--> <!--#4DENDLOOP-->

このコメントを使用して、条件を満たす間、HTMLコードの一部を繰り返すことができます。繰り返し部のコードは<!--#4DLOOP--> と <!--#4DENDLOOP-->で挟まれます。

<!--#4DLOOP condition--> ... <!--#4DENDLOOP--> ブロックはネストできます。4Dと同様、それぞれの<!--#4DLOOP condition--> は同じ数の <!--#4DENDLOOP-->で閉じられていなければなりません。

条件には3種類あります:

<!--#4DLOOP [テーブル]-->
このシンタックスは、指定されたテーブルのカレントプロセスのカレントセレクションに基づき、レコードごとにループします。2つのコメントの間のHTMLコードはカレントセレクションレコード毎に繰り返されます。

注: 4DLOOPタグがテーブルを条件として使用されると、レコードが読み込みのみでロードされます。

以下のHTMLコードは:

<!--#4DLOOP [People]-->
<!--#4DTEXT [People]Name--> <!--#4DTEXT [People]Surname--><BR>
<!--#4DENDLOOP-->

4Dランゲージで表すと以下のとおりです:

 FIRST RECORD([People])
 While(Not(End selection([People])))
  // ...
    NEXT RECORD([People])
 End while

<!--#4DLOOP 配列-->
このシンタックスは、配列項目ごとにループします。2つのコメントの間のHTMLコードが繰り返されるたびに、配列のカレント項目がインクリメントされます。

注: このシンタックスで二次元配列を使用することはできません。この場合、ネストしたループでメソッドを条件に使用します。

以下のHTMLコードは:

<!--#4DLOOP arr_names-->
<!--#4DTEXT arr_names{arr_names}--><BR>
<!--#4DENDLOOP-->

4Dランゲージで表すと以下のとおりです:

 For($Elem;1;Size of array(arr_names))
    arr_names:=$Elem
  //...
 End for

<!--#4DLOOP method-->
こ のシンタックスでは、メソッドがTrueを返す間ループが行われます。メソッドは倍長整数タイプの引数を受け取ります。まずメソッドは引数0を渡されま す。これは (必要に応じて) 初期化ステージとして使用できます。その後、Trueが返されるまで1, 2, 3と渡される引数値がインクリメントされます。

セキュリティのため、On Web Authenticationデータベースメソッドが初期化ステージ (引数に0が渡されて実行される) の前に一度呼び出されます。認証されると、初期化に進みます。

警告: コンパイルのため、C_BOOLEAN($0) とC_LONGINT($1) が宣言されていなければなりません。

例題以下のHTMLコードは:

<!--#4DLOOP my_method-->
<!--#4DTEXT var--> <BR>
<!--#4DENDLOOP-->

4Dランゲージで表すと以下のとおりです:

 If(AuthenticationWebOK)
    If(my_method(0))
       $counter:=1
       While(my_method($counter))
  //...
          $counter:=$counter+1
       End while
    End if
 End if

my_method は以下のようになります:

 C_LONGINT($1)
 C_BOOLEAN($0)
 If($1=0)
  `Initialisation
    $0:=True
 Else
    If($1<50)
  //...
       var:=...
       $0:=True
    Else
       $0:=False `Stops the loop
    End if
 End if

解釈エラーの場合、“<!--#4DLOOP expression-->: エラーの説明” が<!--#4DLOOP --><!--#4DENDLOOP-->の間のコンテンツの代わりに挿入されます。
以下のメッセージが表示されます:
- 予期しない式のタイプ (標準のエラー);
- テーブル名が正しくありません (テーブル名のエラー);
- 配列が必要です (変数が配列でないか、二次元配列が指定された);
- メソッドが存在しません;
- シンタックスエラー (メソッド実行時);
- アクセス権エラー (テーブルやメソッドにアクセスする権限がない)。
- 4DENDLOOP が必要です (<!--#4DLOOP -->が対応する<!--#4DENDLOOP-->で閉じられていない)。

 
プロパティ 

プロダクト: 4D
テーマ: Webサーバ

 
参照 

4DオブジェクトをHTMLオブジェクトにバインドする
URLとフォームアクション

 
タグ 

4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP***