ブログを作成する例を見ながら、以下を参考にちいたんフレームワークの何を、どのように使用するかを決定しましょう。
アプリケーションの構成のオプションで「親パスを有効にする」にチェックをしておけば、peetanのフォルダをプログラム本体のフォルダと分けて管理することができます。
このチュートリアルでは、下記のフォルダ構成で作成していきます。
現在ぴいたんフレームワークはMySQL, PostgreSQL, SQL Server, Accessに対応しています(その他にも柔軟に対応可能)。 チュートリアルではMySQLでの説明をします。データベースの初期化は、フレームワークによって呼ばれる関数config_databaseによって設定します。 以下に例を示します。どのファイルからも参照できるようにconfig.aspというコンフィグファイルを作成してそこに関数を書きます。
config.asp
<%
Sub config_database(ByRef db)
db.add "default", "dsn=db;uid=user;pwd=pass;", DB_TYPE_MYSQL
End Sub
%>
モデルはテーブルを扱うクラスです。これを用意するだけでソースを書く必要が無くなります。試してみましょう。まずブログ用に以下の様なテーブルを作成します。
※Accessのmdbファイルを使う場合は、mdbファイルのセキュリティ設定でインターネットゲストアカウントからの変更を許可するようにしてください。(Windows XPの場合、簡易ファイル共有を使用するにチェックしているとセキュリティ設定ができないので注意してください)
CREATE TABLE `blog_data` (
`id` int(11) NOT NULL auto_increment,
`title` text NOT NULL,
`body` text NOT NULL,
`modified` timestamp NOT NULL
default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
次にモデルを作成します。わかりやすいようにmodelsフォルダ内にでも入れておきましょう。
models/blog_data.asp
Class Blog_data
Public parent
Public Sub Class_Initialize()
Set Me.parent = New Model
With Me.parent
.SetChild Me
End With
End Sub
End Class
本来、ちいたんでは、モデルクラスには何も書かなくても動作するのですが、ぴいたんはレガシーASPなのでクラスの継承ができずに、仕方なくこのようなコードを必ず書かないといけません。でも、おまじないと思って書いてください。
では、このモデルを使用するために、config.asp内にフレームワークから呼ばれる関数を追加しましょう。
config.asp追加分
Sub config_models(ByRef c)
c.AddModel "models/blog_data.asp", "Blog_data", null, null, null
End Sub
ビューは表示部分です。実際のHTMLを書きます。 HTMLを書くにはなんとこれだけの方法が用意されています。
詳しくはマニュアルのビューにて解説しています。今回は3番目の全ファイル共通のテンプレートを用意し、ASPファイルとテンプレートを分ける方法を使用します。
まず全ファイル共通テンプレートを用意しましょう。
template.html
<!--#include file="../peetan/render.asp"-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>Peetan blog</title>
</head>
<body>
<%=view.content%>
</body>
</html>
とまあ、こんなものでしょうか。シンプルなHTMLですが。今回の場合 view.content のところに各ページのコンテンツが表示されます。
続いてブログを書き込むページを用意します。共通テンプレートを使用しているので中身だけです。
add.html
<!--#include file="../peetan/render.asp"-->
<form method="post" action="add.asp">
タイトル<br>
<input type="text" name="blog/title"><br>
内容<br>
<textarea cols="40" rows="6" name="blog/body"></textarea><br>
<input type="submit" value="書き込み">
</form>
コントローラーにより今まで作成したモデル、ビュー全てを連結し、動作させます。ファイルは何の指定もなければビューの拡張子をaspに変えたものです。まずは先ほどビューで作成したフォームにより、データを保存するプログラムがどれだけ少ないかご覧下さい。
add.asp
<!--#include file="./config.asp"-->
<!--#include file="../peetan/peetan.asp"-->
<%
Function action(ByRef c)
If c.post.Count > 0 Then
c.m("Blog_data").insert(c.data("blog"))
End If
End Function
%>
blog_dataというモデルがここで使用されているのがおわかりでしょうか。 ビューでインプットの名前にblog/title等という変な名前を指定していたのは、 blog/で指定されているデータをコントローラ側でdata(“blog”)の連想配列に 自動的に挿入するためでした。
こうやって必要なデータだけを連想配列に集め、insertします。
では書き込んだデータを一覧表示してみましょう。
view.asp
<!--#include file="./config.asp"-->
<!--#include file="../peetan/peetan.asp"-->
<%
Function action(ByRef c)
c.setv "datas", c.m("Blog_data").find("", "modified DESC", "", "")
End Function
%>
view.html
<!--#include file="../peetan/render.asp"-->
<% For Each d in data("datas").Items %>
<table>
<tr>
<td><%=s.html(d("title"))%></td>
<td><%=Replace(s.html(d("body")), vbCrLf, "<br>")%></td>
<td><%=d("modified")%></td>
</tr>
</table>
<% Next %>
このようにsetv関数によりビュー内で値をdataとして参照することが出来ます。
ではデータを編集してみましょう。
edit.asp
<!--#include file="./config.asp"-->
<!--#include file="../peetan/peetan.asp"-->
<%
Function action(ByRef c)
If c.post.Count > 0 Then
c.m("Blog_data").update(c.data("blog"))
End If
c.setv "data", c.m("Blog_data").findone("id=" & c.getd("id"), "")
End Function
%>
edit.html
<!--#include file="../peetan/render.asp"-->
<form method="post" action="edit.asp?id=<%=data("data")("id")%>">
タイトル<br>
<input type="text" name="blog/title" value="<%=s.html(data("data")("title"))%>"><br>
内容<br>
<textarea cols="40" rows="6" name="blog/body">
<%=s.html(data("data")("body"))%></textarea><br>
<input type="hidden" name="blog/id" value="<%=data("data")("id")%>">
<input type="submit" value="更新">
</form>
ではデータを削除してみましょう。もうある程度予想がつきますね。
del.asp
<!--#include file="./config.asp"-->
<!--#include file="../peetan/peetan.asp"-->
<%
Function action(ByRef c)
If c.post.Count > 0 Then
c.m("Blog_data").del("id=" & c.post("id"))
End If
c.setv "data", c.m("Blog_data").findone("id=" & c.getd("id"), "")
End Function
%>
del.html
<!--#include file="../peetan/render.asp"-->
<form method="post" action="del.asp">
削除してもよろしいですか?<br>
タイトル<br>
<%=s.html(data("data")("title"))%><br>
内容<br>
<%=Replace(s.html(data("data")("body")), vbCrLf, "<br>")%><br>
<input type="hidden" name="id" value="<%=data("data")("id")%>">
<input type="submit" value="削除"><br>
</form>
これで一通りブログっぽくなりました。このように非常に簡単にアプリケーションを作成することが出来ます。もうフレームワークを使わないプログラムややモデルのないフレームワークなんて使う気になれませんよね?
ASP.NETも素晴らしいフレームワークですが、レガシーASPで小さいプログラムを作る時はぴいたん。これが世界標準になるでしょう。(僕の)
ぴいたんフレームワークにはもうちょっと便利な機能が用意されています。是非マニュアルを参考に色々と試してみてください。
今回のチュートリアルを形にしたものは、本体に同梱しています。ダウンロードして試してみてください。