記事の表示ごとに処理を行う

記事の表示ごとに処理を行う

サンプルプログラムの作成

各記事にその記事の投稿番号を表示するプラグインを例に、プラグインの作成方法を紹介します。(Web Diary Pro を基に解説します。)

まず、lib/webliberty/Plugin/ 内に Sample5.pm を作成し、ファイル内に以下の内容を記述します。ファイルの文字コードは UTF-8N にしておきます。

package webliberty::Plugin::Sample5;

use strict;

sub new {
  my $class = shift;

  my $self = {
    init   => shift,
    config => shift,
    query  => shift
  };
  bless $self, $class;

  return $self;
}

sub article {
  my $self = shift;
  my %args = @_;

  my $result;

  if ($args{'type'} eq 'diary') {
    $result = '記事番号は' . $args{'no'} . 'です。';
  }

  return $result;
}

1;

ファイルが作成できたら、本体スキンの記事表示部分に以下のコードを追加します。具体的には diarypro/skin/diary.html の15行目あたりにある ${ARTICLE_TEXT} の直後に追加します。(記事表示部分ならばどこでもOK。)

<!--ARTICLE_Sample5_START-->
<p>サンプル項目:${ARTICLE_Sample5}</p>
<!--ARTICLE_Sample5_END-->

この状態で日記帳にアクセスすると、各記事に サンプル項目:記事番号は5です。 のように表示されます。

以下では、このプラグインを例に処理内容を解説します。

プラグインの名前

まずは作成するプラグインの名前を決めます。名前については処理結果をページに埋め込むと同じです。

コンストラクタの実装

プラグインが実行される際、初めに new メソッド(コンストラクタ)が自動的に呼び出されます。コンストラクタについては処理結果をページに埋め込むと同じです。

実行したい処理の実装

コンストラクタ実行後 article メソッドが自動的に呼び出されます。実際にプラグインで処理したい内容をこの中に記述します。今回、article メソッドの内容は以下のとおりです。

sub article {
  my $self = shift;
  my %args = @_;

  my $result;

  if ($args{'type'} eq 'diary') {
    $result = '記事番号は' . $args{'no'} . 'です。';
  }

  return $result;
}

article メソッドの引数として %args を受け取っていますが、ここに記事の情報が格納されています。
$args{'type'} には diarycommenttrackback のどれかが格納され、それぞれ「日記記事」「コメント」「トラックバック」の意味になります。$args{'no'} には記事の番号が格納されています。

article メソッドは記事表示時、コメント表示時、トラックバック表示時、に毎回呼ばれるのですが、$args{'type'} をもとに条件分岐する事により、「記事表示時のみ処理を実行」などとすることができます。今回の場合、日記記事を表示するときのみに処理を実行しています。

%args から取得できる値は以下のとおりです。

記事情報 $args{'type'} 記事の種類(diary
$args{'date'} 投稿日時
$args{'no'} 記事番号
$args{'id'} 記事ID
$args{'stat'} 記事の状態
$args{'field'} 記事の分類
$args{'name'} 記事の投稿者
コメント情報 $args{'type'} 記事の種類(comment
$args{'no'} 記事番号
$args{'pno'} 返信もと記事番号
$args{'stat'} 記事の状態
$args{'date'} 投稿日時
$args{'name'} 記事の投稿者
$args{'subj'} 記事の題名
$args{'host'} 投稿者のホスト情報
トラックバック情報 $args{'type'} 記事の種類(trackback
$args{'no'} 記事番号
$args{'pno'} 受信もと記事番号
$args{'stat'} 記事の状態
$args{'date'} 投稿日時
$args{'blog'} 送信元のサイト名
$args{'title'} 送信元の記事名
$args{'url'} 送信元の記事URL

処理の最後に $result を返していますが、article メソッド内から return で返した値が、記事に埋め込まれる文字列になります。

この値を表示するには、記事表示部分のスキンファイルに

<!--ARTICLE_プラグイン名_START-->
${ARTICLE_プラグイン名}
<!--ARTICLE_プラグイン名_END-->

という記述を追加しておきます。

まとめ

以上が、記事の表示ごとに処理を行う場合の最小限のプラグインサンプルです。まとめると

となります。