-------------------------------------------------------- rNote用プラグイン(暫定版)仕様書 for rNote 0.9.4 or Latter. 2004/07 by Woody-Rinn この文書はタブ4で書かれています -------------------------------------------------------- -------------------------------------------------------- ●はじめに -------------------------------------------------------- この文書は、rNote 0.9.4 時点でのプラグイン仕様書です。 現時点において、このプラグイン仕様はまだ暫定版です。 プラグインと一口で言っても (1) ナビゲーションツール系(BODY用スキンで使用) 例)カレンダーとか、カテゴリ選択とか (2) コンテンツ表示拡張(ITEM用スキンで使用) 例)ツッコミ機能等のプラグイン化など (3) rNoteのシステム自体を拡張 例)はてなのキーワードリンクみたいなのを付けたい の3種類が考えられますが、現時点ではそのうち(1)だけが 実装されています。 また、改良や要望によって、今後仕様が変更になる可能性もあります。 -------------------------------------------------------- ●プラグインの呼び出し方法 -------------------------------------------------------- スキン中のプラグインを呼びたい場所で、以下のように記述します。 <%=$plugin name="プラグイン名" func="呼ばれる関数名" opt="オプション" %> func と opt は省略可です。 func を省略した場合は、プラグイン内の exec() という関数が呼ばれます。 -------------------------------------------------------- ●作成方法 -------------------------------------------------------- 以下、シンプルなカウンタの例を示します。 -------------------------------------- simple_counter.php -------------------------------------- class simple_counter{ var $count; function simple_counter(){ // 初期設定 $fname = DIR_DATA.'counter.log'; // ログのファイル名を指定 // 以下はプログラムです if(file_exists($fname)){ $this->count = _file_get_contents($fname); } $this->count++; $fp = _fopen_wb($fname); fwrite($fp,$this->count); fclose($fp); } function exec($opt){ if(!$opt) $opt="%07d"; return sprintf($opt,$this->count); } } -------------------------------------- ・ファイル名とクラス名は同一である必要があります。 ・初期設定が必要な場合、define 等は使わず、コンストラクタ内で設定するように  してください。 ・スキンで func を省略した際は exec() 関数が呼ばれます。 -------------------------------------------------------- ●プラグインで使用可能な変数 -------------------------------------------------------- 初期設定(rnote_config.php)にあるものは全て参照可能です。 それ以外では、以下の変数の参照が可能です。 ・$_GET['u'] rNoteに対する、カテゴリ又はファイルの指定です。 ex: 'diary/20040101.xml' ・$_GET['d'] rNoteに対する、日付での表示指定です。 ex: '2004-01' ・$_GET['p'] rNoteに対する表示ページ指定です。 ・$g_filelist 全ファイルのリストです。 新しい順にソートされて入っています。 $fname = diary/20040101.xml; if(isset($g_filelist[$fname])){ // 指定のファイルがあるか? $date = $g_filelist[$fname][FILELIST_DATE]; // 日付 $title = $g_filelist[$fname][FILELIST_TITLE]; // タイトル $wbflag = $g_filelist[$fname][FILELIST_WBACCEPT]; // ツッコミ等の受付フラグ } FILELIST_WBACCEPT は、記事ファイル中に タグがあれば記録されています。 $wbflag == '' の時は、初期設定の $wb_acceptdays の設定を見て、ツッコミ受付中か どうかを判断する必要があります。 ・$g_dirlist ディレクトリのリストです。 $dir = "diary/"; $numfiles = $g_dirlist[$dir][DIRLIST_NUMITEM]; $skin_body = $g_dirlist[$dir][DIRLIST_SKIN_BODY]; $skin_item = $g_dirlist[$dir][DIRLIST_SKIN_ITEM]; -------------------------------------------------------- ●プラグインで使用可能な関数 -------------------------------------------------------- ・string _file_get_contents(string filename); php の file_get_contents() 関数とほぼ同一です。 ファイルが無かった場合は rNote でエラー表示を行います。 php 4.2.x でも使用可能です。 ・array _file(string filename); php の file() 関数とほぼ同一です。 ファイルが無かった場合は rNote でエラー表示を行います。 ・resource _fopen_wb(string filename); バイナリ書き込みモードで指定ファイルをオープン、 無ければ新規に作成し、ロックを行います。 ・void error(string message[,int type]); エラー出力を行います。 type として以下の3つが定義されています。 ERR_NORMAL 通常エラー。ツッコミ書き込み時のエラーなど、閲覧者に対しての表示です。 ERR_FATAL 致命的エラー。スキンの記述ミスなど、主にページの管理者に対しての表示です。 ERR_404 存在しないエントリのアクセス時などです。 通常とは別のスキンを使用する事が可能です。 ・void SplitPath(string path,string &dir,string &fname); path をディレクトリとファイル名に分解します。 この関数では、path の最後が '/' で終わっていない場合、拡張子があればファイル名、 拡張子が存在しなければディレクトリ指定であると判断します。 'diary/2004' → dir='diary/2004/' fname='' 'diary/2004.xml' → dir='diary/' fname='2004.xml' 例) // 単一ファイル表示モード(Permalink)か? $bSingle=false; SplitPath($_GET['u'],$dir,$fn); if($fn) $bSingle=true; ・string MakeLinkUrl([string fname[,array query[,boolean bFullPath]]]); リンク用URLを作成します。 MakeLinkUrl(); // HomeのURLを作成 MakeLinkUrl('','',true); // Homeのhttpから始まるフルパスのURLを作成 MakeLinkUrl('diary/'); // 日記ページのURLを作成 MakeLinkUrl('diary/20040101.htm'); // 2004年1月1日の日記のURLを作成 MakeLinkUrl('',array('d'=>'2004-01')); // 2004年1月のエントリのURLを作成 MakeLinkUrl('diary/',array('d'=>'2003')); // 2003年の日記のURLを作成 MakeLinkUrl('',array('d'=>'2004','p'=>'2')); // 2004年の2ページ目のURLを作成