iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
使えるデータベースはSQLiteのみのサイトをINTER-Mediatorで構築してみる。
ツールとして、Coda2とDiet Codaを使ってみたのだが、iPad miniでPHPが編集できるなんて、素晴らしい世の中になったものだ。
SQLiteのデータベースファイルは、事前に生成した物をサイトにアップする事にしたので、スキーム・ファイルの設計が必要だ。
CREATE TABLE person (
id INTEGER PRIMARY KEY AUTOINCREMENT,
membership_number TEXT,
name TEXT
);
CREATE UNIQUE INDEX person_id ON person (id);
INSERT INTO person(id,membership_number,name) VALUES (1,'012345','Yukio Murakami');
INSERT INTO person(id,membership_number,name) VALUES (2,'000002','Someone');
INSERT INTO person(id,membership_number,name) VALUES (3,'000003','Anyone');
CREATE TABLE attendance (
id INTEGER PRIMARY KEY AUTOINCREMENT,
person_id INTEGER,
class_name TEXT,
date DATE
);
CREATE UNIQUE INDEX attendance_id ON attendance (id);
CREATE INDEX attendance_person_id ON attendance (person_id);
INSERT INTO attendance (person_id,class_name,date) VALUES (1,'General','2013-1-6');
INSERT INTO attendance (person_id,class_name,date) VALUES (1,'General','2013-1-11');
INSERT INTO attendance (person_id,class_name,date) VALUES (1,'Special','2013-1-12');
スキーム・ファイルの名前は、rollbook_schema_sqlite.txtとした。
次は、データベースファイルを生成。
$ mkdir db
$ mkdir db/im
$ sudo sqlite3 -init rollbook_schema_sqlite.txt db/im/rollbook.sq3
:
sqlite> .quit
$ sudo chown _www db/im
$ sudo chown _www db/im/rollbook.sq3
定義ファイルは以下のとおり。
< 1,
'paging' => true,
'name' => 'person',
'key' => 'id',
'query' => array( /* array( 'field'=>'id', 'value'=>'5', 'operator'=>'eq' ),*/),
'sort' => array(array('field' => 'id', 'direction' => 'asc'),),
'repeat-control' => 'insert delete',
),
array(
'name' => 'attendance',
'key' => 'id',
'relation' => array(
array('foreign-key' => 'person_id', 'join-field' => 'id', 'operator' => '=')
),
'repeat-control' => 'insert delete',
),
),
array(
'formatter' => array(),
'aliases' => array(
'attendanceid' => 'attendance@person_id@value',
'attendancename' => 'attendance@name_person@innerHTML',
),
),
array(
'db-class' => 'PDO',
'dsn' => 'sqlite:/それぞれの環境のパスを記述/db/im/rollbook.sq3',
),
0
);
?>
実は、第二引数のaliasesに何を指定したらいいのか分かっていない。nullを指定すると上手く動かなかったので、サンプルを見よう見まねで真似た。
ページファイルは以下のとおり。
<!DOCTYPE html>
<!--
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
<link rel="stylesheet" type="text/css" href="rollbook.css"/>
<title>出欠簿</title>
<script src="include.php"></script>
<script type="text/javascript">
window.onload = function() {
var nodeUnsupport = document.getElementById('nonsupportmessage');
if (INTERMediatorOnPage.INTERMediatorCheckBrowser(nodeUnsupport)) {
INTERMediator.construct(true);
}
}
</script>
</head>
<body>
<div id="nonsupportmessage" style="background-color:#333333">
<div style="text-align:center;color:yellow">
If you see this, you must use any unsupported web browser.
Or you should set to active for JavaScript.
In case of generating the page, Please wait a while.
</div>
<div style="text-align:center;color:yellow">
この表示が見えている場合、非対応ブラウザで参照されています。
あるいは、JavaScriptを使用しないように設定されています。
描画処理中の場合はしばらくお待ちください。
</div>
</div>
<div id="IM_NAVIGATOR">Navigation Controls by INTER-Mediator</div>
<table border="1">
<tbody>
<tr>
<th>id</th>
<td>
<div class="IM[person@id]"></div>
</td>
</tr>
<tr>
<th>membership#</th>
<td>
<input type="text" class="IM[person@membership_number]" value=""/>
</td>
</tr>
<tr>
<th>name</th>
<td>
<input type="text" class="IM[person@name]" value=""/>
</td>
</tr>
<tr>
<td colspan="2">
<table border="1">
<thead>
<tr>
<th>class_name</th>
<th>date</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" class="IM[attendance@class_name]"/></td>
<td><input type="text" class="IM[attendance@date]"/></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<!--<button onclick="INTERMediator.saveRecordFromNavi()">Save</button>-->
</body>
</html>
上手く動いているようだ。
今回、サイト側の作業はCoda2を使ったのだが、便利だね!