Home > Authoring > Guide > Embedder | English
Live Data EmbedderはApacheなどWebサーバ配下でページ要求ごとにフィルタとして動作するプリプロセッサです。 Embedderはテキストソース内のマクロ変数と呼ばれる特殊なマーカーを、SQLデータベースやCSVファイルなどのデータテーブルに保存された値にダイナミックに置き換えます。
マクロにはボタンマクロというものもあり、これをテキストソースに埋め込むことで、ユーザにデータの一覧を見せたり、新しいデータをタイプして登録したり、既存のデータを更新・削除してもらうことができます。
Embedderは行と列からなる表形式のデータを操作します。 これをデータテーブルと呼びます。
データテーブルの例です。
Date | Customer | Apple | Orange | Kui |
---|---|---|---|---|
20-05-01 | yamada | 10 | 10 | 0 |
20-05-03 | suzuki | 10 | 0 | 10 |
20-05-10 | yamada | 0 | 0 | 20 |
Embedderで作成したWebページを使って次のことが行えます。
Markdownでは縦棒(|)を使ってHTMLの表を書きます。 Embedderを使うと、表の一行にあたるテンプレートを使って、データベーステーブル内の全行のデータを表示することができます。
最初の縦棒を$|
に、最後の縦棒を|$
に変えることでその行がテンプレートであることを表します。
| Date | Customer | Apple | Orange | Kui | |
|--|--|--|--|--|--|
$| $(date) | $(customer) | $(apple) | $(orange) | $(kui) | $(!edit) |$
$(name)という書式は表示変数と呼ばれ、その位置に変数のかわりにデータ行のnameという名前の列の値を表示することを指定するものです。 データテーブルの行が複数ある場合、各行のその列の値が順に表示されます。
前出の表に対して上記の行テンプレートを使うと次の出力が生成されます。
Date | Customer | Apple | Orange | Kui | |
---|---|---|---|---|---|
20-05-01 | yamada | 10 | 10 | 0 | [Edit] |
20-05-03 | suzuki | 10 | 0 | 10 | [Edit] |
20-05-10 | yamada | 0 | 0 | 20 | [Edit] |
最後の列の[Edit]は次節で述べます。
Webサーバにデータ項目を送信するにはHTMLフォームを使います。 次の構文はEmbedder流のHTMLフォームの表現方法です。 これによりサーバ上のデータテーブルに行データを書き込むことができます。
$form$
Date: $(?date)
Name: $(?customer)
Apple: $(?apple)
Orange: $(?orange)
Kui: $(?kui)
$(!update) $(!delete)
$(!add) $(!reset)
$end$
$forms
と$end$
のマーカーは、Embedderに対して、その間に挟まれた行からデータテーブル操作を行うために必要なHTMLフォームを作成することを指示します。
$(?name)という書式(疑問符に変数名が続く)は投入変数あるいは投入マクロと呼ばれ、その値の入力のためのHTML入力フィールドに置き換えられます。
$(!action)という書式(感嘆符に操作名が続く)は、アクションマクロと呼ばれるボタンマクロの一種で、HTMLフォームの送信ボタンや、フォーム以外の場所に置くリンクボタンに該当します。 このボタンをクリックするとその操作内容(アクション)がWebサーバに送られ、データテーブルが更新され、その結果を反映したページが表示されます。
ページアクションには: 追加(add)、更新(update)、削除(delete)、編集(edit)、リセット(reset)があります。
上記のフォームは次のようになります。
Date: [ ]
Name: [ ]
Apple: [ ]
Orange: [ ]
Kui: [ ]
[Update] [Delete]
[Add] [Reset]
提供: 横浜工文社 Kobu.Com
2020-may-09 project started
2020-jun-05 documents for the first working implementation
2020-aug-23 published to github