NANOChatのMENTA化、その3

2008年12月29日
| コメント(0) | トラックバック(0) NANOChatのMENTA化、その3

遅々として進みませんが。

JSONを使って読み書きをすることにしたのですが。
そもそも、アプリケーションの設定をどう呼ぶか、とか、テンプレートからJSON等のモジュールをどうやって使うか、とかいう根本的なところで悪戦苦闘してました。

menta.cgiには、「あなたのアプリの設定」とされている部分があるのですが、それをどのようにして呼ぶのかをソースを見ながら試してみました。
どのように呼ぶのを想定しているのかは不明ですが、とりあえずの解決策としては、

? my $self = MENTA->config->{application}

として、$selfに入れてから使うようにしました。
設定を以下のようにした場合、

    # あなたのアプリの設定
    application => {
        limit => 30,
        member_filename => 'member.cgi',
    },

それぞれ以下のようにして使えます。

$self->{limit}           # 30
$self->{member_filename} # member.cgi


で、JSON等のモジュールをどうやって使うかですが。
とりあえず安直に考えて、

? use JSON

としてから、関数形式で使うことにしました。

しかし、ここで一つ罠がありました。

JSONで使おうとした関数は「to_json」と「from_json」なのですが、単純に書いてしまうと、それぞれ、「to.pl」と「from.pl」というプラグインを探しにいってしまうのです。
まあ、関数をそのまま呼び出せないのであれば、パッケージ名をつけてやればよい、ということで、それぞれ「JSON::to_json」と「JSON::from_json」というように呼び出して解決できました。

解決したので、それはそれでよかったのですが、なんとなくプラグイン化してみました。
関数名を「json_to」と「json_from」という名前にして、「json.pl」を呼び出すようにしました。
プラグインというには微妙ですが、とりあえず機能的には問題ないということで。

app/controller/nanochat/enter.mt

?= render('nanochat/header.mt', '名前を教えてほしいの。')
?= render('nanochat/member.mt')
 
<div class="nano">
<p>工事中なの。</p>
</div>
 
?= render('nanochat/footer.mt')


app/controller/nanochat/member.mt

? my $self = MENTA->config->{application}
? my $datafile = MENTA->data_dir() . $self->{member_filename}
? my $members = json_from(file_read($datafile))
? my @new_members
<div class="nano">
<p>今は、
? foreach my $member (sort {$b->{now} <=> $a->{now}} @{$members}) { # 更新時間の新しい順でソート
?     if (time - $member->{now} < $self->{limit} * 60) { # タイムアウトしていない場合
?         push @new_members, $member
        <strong class="name"><?= $member->{name} ?></strong> さんと
?     }
? }
<strong class="name">なの</strong><?= @new_members ? " " : " だけ" ?>がいるの。</p>
</div>
? file_write($datafile, json_to(\@new_members))


plugins/json.pl

package MENTA::Plugin::JSON;
use MENTA::Plugin;
# JSONを使う用
use JSON;
 
sub json_to { to_json(shift) }
 
sub json_from { from_json(shift) }
 
1;

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメントする

Google検索

Last.fm

このブログ記事について

このページは、のぶりんが2008年12月29日 07:27に書いたブログ記事です。

ひとつ前のブログ記事は「プラグイン「MTHatenaStar」を入れてみた」です。

次のブログ記事は「google-code-prettifyを試してみた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type