A_single_file_wiki_wifky2.png

[hack] プラグインのサンプル(1)

プラグインの実装方式のうち、もっともよく使われれる、 インラインプラグインとアクションプラグインの一例を紹介します。

「ヘー」プラグイン

「Hee」というボタンを表示します。 ボタンを押下すると、ボタンの横のカウンターが +1 されます。

Hee.PNG (←これは画像なので押せません)

### インラインプラグインとアクションプラグインを使った
### サンプルプラグイン「ヘー」
###
### 使い方:
###     ページのどこかに ((hee)) と書く

package wifky::hee;

### 開発時はコメントを外して、警告を強化しておく
### (リリース時にコメントアウトするのは、
###  use strict すらない古いプロバイダ環境のため)

# use strict; use warnings;


# 「ヘー」ボタンを表示するインラインプラグイン
$::inline_plugin{'hee'} = sub {
    ### ページ名を取得する.
    my $pagename=$::form{p};

    ### ブロックの戻り値 = 出力される HTML となる.
    sprintf('<form action="%s" method="post">
             <input type="hidden" name="a" value="hee_commit">
             <input type="hidden" name="p" value="%s">
             <input type="submit" name="text" value="Hee%s" >
             </form>' 
         , &::enc($::postme)  # POST時に使う CGIパス
         , &::enc($pagename)  # フォーム内のページ名
         , &::read_object($pagename,'hee_count') # 添付ファイル(hee_count)を読む
    );
    # 関数 &::enc は、< > & を &lt; &gt; &amp; へ変換する関数
};


# 「ヘー」ボタンを押すと、a=hee_commit という CGI パラメータで、
# wifky が呼び出される。その際、以下の関数が実行される。

$::action_plugin{'hee_commit'} = sub {
    ### ページ名取得 ###
    my $pagename = $::form{p};

    ### 第二引数のページのロックをかけ、
    ### その後、第一引数のブロックを実行する。
    ### ブロックの実行が終わったら、ロックを解除する。
    &::lockdo(
        sub{
            ### ロックをかけている間にカウンターを増やす ###
            my $cnt = &::read_object( $pagename , 'hee_count') || 0;
            &::write_object( $pagename , 'hee_count' , ++$cnt );
        } 
        , $pagename
    );

    ### 「Wait or Click Here 」とだけ表示させて、
    ### すぐ画面を引数のページへ遷移させる。
    ### (ワンクッションおくと、リロードしてもカウンタが増えない)
    &::transfer_page( $pagename );
};

|

Designed for @nifty.