■作者サイト■

■CALENDAR■
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30   
<<前月 2010年09月 次月>>
■NEW ENTRIES■
■RECENT COMMENTS■
■RECENT TRACKBACK■
■CATEGORIES■
■ARCHIVES■
■LINK■
■PROFILE■
■LOGIN■
現在のモード: ゲストモード
USER ID:
PASSWORD:
■POWERED BY■
BLOGN(ぶろぐん)
BLOGNPLUS(ぶろぐん+)
■OTHER■
 

MobaSiF研究(1) 静的コンテンツを追加してみる
先日インストールしたMobaSiF。インストールしただけでは面白くないので、サンプルコードをインストールして遊んでみました。サンプルコードはこちらのExcelファイル(外部リンク)をご参照ください。

サンプルコードをインストールすると、どこかでみたことあるようなミニコミュニティサイトが動きます。会員登録をして日記を書くぐらいしかできませんが、ソースコードを見るといろいろなことが分かって面白いですね。

で、このサンプルコードを少し触ってみたいと思います。
トップページの一番下にFAQってありますよね。この下に「お問い合わせ」という項目をつくって、新しく作成した静的ページにリンクを張ってみます。

まず、FAQがどうなっているのか見てみます。http://localhost/ がトップページだとすると、このFAQのリンク先は、 http://localhost/faq/ になっています。
実際に、このページのHTMLファイルは template/_html/faq/index.html にあります。

なるほど。では、template/_html/faq/toiawase.html をつくればいいのかな。

ということで、同じディレクトリにある index.html を参考に toiawase.htmlを作成します。

<html>
<head><title>$CON:title$</title></head>
<body $STY:attr-body$>
$INC:header:title=問い合わせ$
$INC:small$

お問い合わせはこちらまで!



電話:0120-123-456

E-Mail:toiawase@domain.com

$INC:/small$
$INC:footer$
</body>
</html>


できた!
これで、http://localhost/faq/toiawase.html にアクセスしてみよう!

・・・・だめ。これだけではダメなんですね。ドキュメントをよく読みましたらテンプレートをコンパイルする必要があるらしい。
コンパイラは script/tool/compile_template にあるようです。

# cd script/tool
# ./compile_template
/_html/faq/toiawase(d)
/_html/faq/toiawase(a)
/_html/faq/toiawase(v)


なんだかコンパイルしてるっぽい。
これで、http://localhost/faq/toiawase.html にアクセス。



これで、表示された。
あとは、トップページからリンクを張ればオッケイですね。
トップページのテンプレートは template/_system/top/top.html にあるので、適当な場所にリンクを追加。

問い合わせ


で、先ほど同様にテンプレートをコンパイルする


# ./compile_template
/_system/top/top(d)
/_system/top/top(a)
/_system/top/top(v)




おー、できた。できた。コンパイラは修正があったファイルを自動的に認識してくれるみたい。

・・・というわけで、読んでいる人にはなにがなんだかな文章ですが、静的ページの作成方法をまとめると・・・


(1) template/_html/ 内にページを作成する
(2) テンプレートをコンパイルする(script/tool/compile_templateを実行)


ということですね。この静的ページですが、カスタマイズすれば静的ページにも、ニックネームを表示させたりできるっぽいですね。(この時点で静的とは言えないですが) そのあたりはまた今度書いてみたいと思います。

追記:上記のHTMLのソース aタグが効いてますね。&gt;とか書いてもダメ。面倒くさいので直しません。すみません。


| MobaSiF | 08:16 PM | comments (0) | trackback (0) |
MobaSiFをインストールしてみた
モバゲータウンで使われているフレームワーク「MobaSiF」をインストールしてみた。
中にあるドキュメントに従ってやれば、難しくないのですが、私が詰まったところをメモしておきます。

・$MOBA_DIR のパーミッションを711とか755ぐらいにしておく。でないと、アクセスしたときにForbiddenになります。
・ローカル環境でやる場合は hosts ファイルにホスト名を設定しましょう。
サーバ側では /etc/hosts に

192.168.1.123 maruyama.example.net
192.168.1.123 www.maruyama.example.net

という感じに。
クライアント側も C:Windows¥system32¥drivers¥etc¥hosts にサーバ同様書いておきましょう。
www. も設定しているのは PCからアクセスした時に www. にリダイレクトかけている感じなので。

で、ブラウザから http://(設定したドメイン名)/ にアクセスして「トップページ」がでればおけ。

これだけではつまらんので、サンプルコードも入れて遊んでみよう。
ここのExcelファイルが参考になります。
mkdir $MOBA_DIR/install/sample
cd $MOBA_DIR/install/sample
wget http://osdn.dl.sourceforge.jp/moba/31071/moba-0.9.0-sample-1.0.tar.gz"
tar zxvfp moba-0.9.0-sample-1.0.tar.gz
cd moba-0.9.0-sample
rsync -avb --suffix=.orig diff/ $MOBA_DIR/
cd $MOBA_DIR/conf
find . -type f | xargs sed -i s:###MOBA_DIR###:$MOBA_DIR:g
find . -type f | xargs sed -i s/###PROJ_NAME###/moba/g
find . -type f | xargs sed -i s/###USER###/$USER/g
find . -type f | xargs sed -i s/###GROUP###/`id -gn`/g
find . -type f | xargs sed -i s/###DOMAIN###/moba.example.jp/g
cat $MOBA_DIR/conf/createdb.sql | mysql -u root
compile_template --refresh
damonctl start
sudo /usr/local/apache/bin/apachectl graceful


で、サンプルのインストールも完了。

ブラウザからアクセスするとサンプルのサイトが出てきて、会員登録の画面に進めます。
(マニュアルにあるようにブラウザのUser-Agentは偽装しないといけません)
私の場合「★携帯電話情報を送信してください。」と怒られてしまうので、ここまでにしておきました。
送出するヘッダーとかいじればなんとかなるのかな。


ちょっと、サンプルコードのソースを見てみました。conf/main.conf を見てみると、

#-------------------
# 会員登録
'r00' => [ 2,0,0, 'Page::Regist', 'pageMain' ], # 登録トップ
'r01' => [ 2,0,0, 'Page::Regist', 'pageMain' ], # 入力1
'r02' => [ 2,0,0, 'Page::Regist', 'pageMain' ], # 入力2
'r03' => [ 2,0,0, 'Page::Regist', 'pageMain' ], # 確認
'r04' => [ 2,0,0, 'Page::Regist', 'pageMain' ], # 処理⇒完了


な風になっています。一番左の 'r00'は機能名(FUNC_NAME)、[ ]の中は、左の3つの数字がアクセス許可の設定、後ろ2つがどの関数を呼び出すかという設定のよう。実際にテンプレートに登録のトップページを呼び出す時の記述は <a;a href="/_r00">会員登録 という感じで、 「_(機能名)」 で呼び出す。そうするとmod_rewriteが働いて ?f=(機能名)で呼び出しがかかって、コントローラによって該当する機能名に対応する関数(ここではPage::PregistモジュールのpageMain)が呼び出されるという感じでしょうね。

実際にpageMain関数を見てみると

#---------------------------------------------------------------------
# 会員登録

sub pageMain {
my $func = shift;
my $from = $_::F->{p};
my $rhData = Common::cloneHash($_::F, '^[a-z]');

$func = 'r01' if ($rhData->{mod_r01});
my $page = $func;

normalizeData($rhData);

if ($from eq 'r00') {
setInitialData($rhData);
}

if ($_::U->{USER_ID}) {
$page = 'r04_2'; # 登録済み
} else {
if (my $ret = checkData($rhData, $from, $page)) {
$page = $ret;
} elsif ($func eq 'r04') {
registerUser($rhData);
DA::commit();
}
# 表示用データ生成
$rhData->{birthday} = $rhData->{bymd};
Func::User::makeProfile($rhData);
}

my $html = HTMLTemplate::insert("regist/$page", $rhData);
Response::output($html);
}


pageMain は main.confで指定した機能名を受け取るようになっていて、最後に
my $html = HTMLTemplate::insert("regist/$page", $rhData);
Response::output($html);

として、該当するテンプレートを呼び出して出力しているらしい。

あと $_::F には リクエストに関するオブジェクト入っていて $_::F->{xxxx} でフォームの値が取得できるっぽい。ここではそれを $rhData にコピーしている(^[a-z]という条件で)。
$_::Uにはユーザ情報が入っていて、会員種別だとかいう情報を受け取れるようです。

なんというか、わかりやすいといえば、わかりやすいですが、一から組めと言われるとアレですね。^^; もうちょっと研究してみたいと思います。こういうソースを読んでると
大変勉強になります。


| MobaSiF | 01:39 PM | comments (2) | trackback (0) |
PAGE TOP ↑