1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
\r
2 <html xml:lang="jp" xmlns="http://www.w3.org/1999/xhtml">
\r
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
\r
5 <title>Nucleus - プラグイン API</title>
\r
6 <link rel="stylesheet" type="text/css" href="styles/manual.css" />
\r
7 <style type="text/css">
\r
8 /* refence parameters (greenish) */
\r
10 background-color: #afa;
\r
14 /* object parameters */
\r
19 content: " (object)";
\r
22 /* read-only parameters (non-ref; reddish) */
\r
24 background-color: #faa;
\r
31 <p class="heading"> </p>
\r
32 <div class="heading">
\r
37 <div class="note-trans"><strong>訳者注:</strong>
\r
39 <li>このドキュメントの原文は以下のURLにあります。<br />
\r
40 <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>
\r
41 <li>誤訳にお気づきの方は<a href="http://nucleus.fel-is.info/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>
\r
45 <div class="note"><strong>注:</strong>
\r
47 <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin
\r
48 Development Forum</a> (<a href="http://nucleus.fel-is.info/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>
\r
49 <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>
\r
56 <a href="./index.html">開発者向けドキュメントの目次へ戻る</a>
\r
60 このドキュメントはNucleusプラグインの作り方についての解説です。
\r
63 <h1><a name="toc"></a>目次</h1>
\r
66 <li><a href="#introduction">イントロダクション</a></li>
\r
67 <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>
\r
68 <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>
\r
69 <li><a href="#skinvars"><code><%plugin(...)%></code> スキン変数</a></li>
\r
70 <li><a href="#templatevars"><code><%plugin(...)%></code> テンプレート変数</a></li>
\r
71 <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>
\r
72 <li><a href="#events">イベントとイベント登録の仕方</a></li>
\r
73 <li><a href="#options">オプションを保存する</a></li>
\r
74 <li><a href="#tables">データベース・テーブル</a></li>
\r
75 <li><a href="#admin">プラグイン管理エリアの提供</a></li>
\r
76 <!-- <li><a href="#admin">Providing an admin area</a></li>
\r
77 <li><a href="#parser">Using the <code>PARSER</code> class</a></li>
\r
78 <li><a href="#"></a></li>
\r
79 <li><a href="#"></a></li>
\r
80 <li><a href="#"></a></li>
\r
81 <li><a href="#"></a></li>-->
\r
84 <h1>イントロダクション <a name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
87 Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。
\r
91 プラグインの利点は以下のとおりです。</p>
\r
94 <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>
\r
95 <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>
\r
99 すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code> になるでしょう。プラグインファイル名は <code>NP<i>_name</i>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。</p>
\r
102 <b>注:</b> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。</div>
\r
107 <h1>はじめてプラグインを書いてみる<a name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
110 では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。</p>
\r
112 <pre class="example"><code><?
\r
114 class NP_HelloWorld extends NucleusPlugin {
\r
117 function getName() {
\r
118 return 'Hello World';
\r
122 function getAuthor() {
\r
123 return 'Wouter Demuynck';
\r
127 // mailto:foo@bar.com の形式も可
\r
130 return '../../index.html';
\r
134 function getVersion() {
\r
138 // インストール済みのプラグインリストに表示される説明文
\r
139 function getDescription() {
\r
140 return 'Just a sample plugin.';
\r
143 function doSkinVar($skinType) {
\r
144 echo 'Hello World!';
\r
152 このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?></code> の後や、最初の <code><?</code> の前にスペースがないことを確認しましょう</em>。ところでNP は "Nucleus Plugin" って意味ですよ :-)
\r
154 <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>
\r
155 <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>
\r
156 <li>スキンを編集し、実際のページに表示する箇所に次の文を挿入します。
\r
157 <pre class="example"><code><%plugin(HelloWorld)%></code></pre>
\r
158 注意:カッコ内の名称 (HelloWorld) は大文字小文字を識別します!</li>
\r
159 <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に "Hello
\r
160 World " と見えますね?</li>
\r
163 <p>ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。</p>
\r
166 <h1>NucleusPlugin クラスの概要 <a name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
168 <p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>
\r
170 <p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>
\r
172 <table summary="An overview of the redefinable methods in the class NucleusPlugin">
\r
174 <code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)
\r
177 <th>メソッド名</th><th>説明</th>
\r
180 <td><code>getName()</code></td>
\r
181 <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>
\r
184 <td><code>getAuthor()</code></td>
\r
185 <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>
\r
188 <td><code>getURL()</code></td>
\r
189 <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>
\r
192 <td><code>getDescription()</code></td>
\r
193 <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>
\r
196 <td><code>getVersion()</code></td>
\r
197 <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>
\r
200 <td><code>getMinNucleusVersion()</code></td>
\r
201 <td>(v2.0b) 最低必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>
\r
204 <td><code>getMinNucleusPatchLevel()</code></td>
\r
205 <td>(v3.1) Returns the minimum required Nucleus patch level that needs to be present when running the minimal required Nucleus version (<code>getMinNucleusVersion</code>). By default, this returns <code>0</code>. This function is generally used when new plugin features are available only as patches to the latest released Nucleus version.</td>
\r
208 <td><code>init()</code></td>
\r
209 <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>
\r
212 <td><code>doSkinVar($skinType)</code></td>
\r
213 <td><code><%plugin(...)%></code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>,
\r
214 <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>
\r
217 <td><code>doTemplateVar(&$item)</code></td>
\r
218 <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item
\r
219 header/body/footer</code> と <code>dateheader/footer</code>)での<code><%plugin(...)%></code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
\r
220 <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>
\r
223 <td><code>doTemplateCommentsVar(&$item, &$comment)</code></td>
\r
224 <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code><%plugin(...)%></code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
\r
225 <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code>
\r
226 メソッドの実装に関する詳細情報はこちら</a></td>
\r
229 <td><code>doAction($type)</code></td>
\r
230 <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。.
\r
231 これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの
\r
232 <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No
\r
233 Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>
\r
236 <td><code>install()</code></td>
\r
237 <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>
\r
240 <td><code>unInstall()</code></td>
\r
241 <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>
\r
244 <td><code>getEventList()</code></td>
\r
245 <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code> の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報
\r
249 <td><code>getTableList()</code></td>
\r
250 <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>
\r
253 <td><code>hasAdminArea()</code></td>
\r
254 <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>
\r
258 <p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this->functionName()</code>シンタックスを利用して呼び出します。</p>
\r
260 <table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">
\r
262 <code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)
\r
270 <code>createOption(...)</code>
\r
271 <br /><code>createBlogOption(...)</code>(v2.2)
\r
272 <br /><code>createCategoryOption(...)</code>(v2.2)
\r
273 <br /><code>createMemberOption(...)</code>(v2.2)
\r
275 <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>
\r
279 <code>deleteOption(...)</code>
\r
280 <br /><code>deleteBlogOption(...)</code>(v2.2)
\r
281 <br /><code>deleteCategoryOption(...)</code>(v2.2)
\r
282 <br /><code>deleteMemberOption(...)</code>(v2.2)
\r
284 <td><a href="#options" title="More info on options">オプションを削除します。</a></td>
\r
288 <code>setOption(...)</code>
\r
289 <br /><code>setBlogOption(...)</code>(v2.2)
\r
290 <br /><code>setCategoryOption(...)</code>(v2.2)
\r
291 <br /><code>setMemberOption(...)</code>(v2.2)
\r
293 <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>
\r
297 <code>getOption(...)</code>
\r
298 <br /><code>getBlogOption(...)</code>(v2.2)
\r
299 <br /><code>getCategoryOption(...)</code>(v2.2)
\r
300 <br /><code>getMemberOption(...)</code>(v2.2)
\r
302 <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>
\r
306 <code>getAllBlogOptions(...)</code>(v2.2)
\r
307 <br /><code>getAllCategoryOptions(...)</code>(v2.2)
\r
308 <br /><code>getAllMemberOptions(...)</code>(v2.2)
\r
310 <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>
\r
313 <td><code>getID()</code></td>
\r
314 <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>
\r
317 <td><code>getAdminURL()</code></td>
\r
318 <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>
\r
321 <td><code>getDirectory()</code></td>
\r
322 <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は"<code>.../nucleus/plugins/<em>plugname</em>/</code>"のようになります。</td>
\r
325 <td><code>getShortName()</code></td>
\r
326 <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>
\r
331 <h1>スキン変数<a name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
336 独自のスキン変数を生成し、<code><%plugin(<em>PlugName,parameters</em>)%></code> または <code><%PlugName(parameters)%></code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。</p>
\r
339 スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。</p>
\r
341 <pre class="example"><code>function doSkinVar($skinType)
\r
342 function doSkinVar($skinType, $param1, $param2)
\r
343 function doSkinVar($skinType, $skinVar, $param1, $param2)
\r
344 function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>
\r
347 <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',
\r
348 'search', 'imagepopup', <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>
\r
349 <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code><%plugin(PlugName,VarType)%></code>)。</li>
\r
350 <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>
\r
356 <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>
\r
362 <h1>テンプレート変数<a name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
367 テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>
\r
370 <li>スキン内ではなくテンプレート内から呼ばれます。</li>
\r
371 <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。
\r
373 <li><code>doTemplateVar</code> メソッドは <code>&$item</code> パラメータを取ります。</li>
\r
374 <li><code>doTemplateCommentsVar</code> メソッドは <code>&$item</code> と <code>&$comment</code> パラメータを取ります。</li>
\r
376 <strong>&マークに注意!</strong>
\r
380 <p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code><%plugin(PlugName,parameters)%></code> または <code><%PlugName(parameters)%></code>)。</p>
\r
383 デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。</p>
\r
386 独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。</p>
\r
388 <pre class="example"><code>function doTemplateVar(&$item)
\r
389 function doTemplateVar(&$item, $param1, $param2)
\r
390 function doTemplateVar(&$item, $type, $param1, $param2)
\r
391 function doTemplateVar(&$item, $type, $param1 = 'default value')
\r
392 function doTemplateCommentsVar(&$item, &$comment)
\r
393 function doTemplateCommentsVar(&$item, &$comment, $param1, $param2)
\r
394 function doTemplateCommentsVar(&$item, &$comment, $type, $param1, $param2)
\r
395 function doTemplateCommentsVar(&$item, &$comment, $type, $param1 = 'default value')</code></pre>
\r
400 <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>
\r
406 <h1>アクション<a name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
408 <p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは
\r
409 <code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>
\r
411 <p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは
\r
412 <code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>
\r
415 <code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。</p>
\r
422 <h1>イベント<a name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
425 Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。</p>
\r
430 下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。</p>
\r
432 <pre class="example"><code>class NP_Acronyms extends NucleusPlugin {
\r
434 function getEventList() { return array('PreAddComment'); }
\r
436 function event_PreAddComment(&$data) {
\r
438 $data['comment']['body'] =
\r
440 '<acronym title="HyperText Markup Language">HTML</acronym>',
\r
441 $data['comment']['body']);
\r
446 <p>このプラグインはコメント中の'HTML'というテキストを'<code><acronym title="HyperText
\r
447 Markup Language">HTML</acronym></code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>
\r
451 <p>イベント登録に必要なステップは以下になります。</p>
\r
454 <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>
\r
455 <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>
\r
458 <p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>
\r
462 <p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>
\r
464 <p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>
\r
467 <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>
\r
468 <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>
\r
471 <p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object
\r
472 by ref</var>のように示されます。</p>
\r
476 <table summary="An overview of events to which a Nucleus Plugin can subscribe, and what parameters are passed along to the method that handles the event">
\r
478 プラグインが登録できるイベント</caption>
\r
485 <td>PreSkinParse</td>
\r
486 <td>スキンのパースの直前</td>
\r
488 <dt class="obj ref">skin</dt>
\r
489 <dd>パースする<code>SKIN</code>オブジェクト</dd>
\r
490 <dt class="ro">type</dt>
\r
491 <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
\r
492 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
\r
496 <td>PostSkinParse</td>
\r
497 <td>スキンのパースの直後</td>
\r
499 <dt class="obj ref">skin</dt>
\r
500 <dd>パースする<code>SKIN</code>オブジェクト</dd>
\r
501 <dt class="ro">type</dt>
\r
502 <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search',
\r
503 'imagepopup', 'fileparser'のいずれか) </dd>
\r
508 <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>
\r
510 <dt class="ref obj">blog</dt>
\r
511 <dd><code>BLOG</code> オブジェクト</dd>
\r
512 <dt class="ref obj">item</dt>
\r
513 <dd>アイテムデータを持つオブジェクト</dd>
\r
518 <td>アイテムのパース後、ただしアイテムフッターのパース前</td>
\r
520 <dt class="ref obj">blog</dt>
\r
521 <dd><code>BLOG</code> オブジェクト</dd>
\r
522 <dt class="ref obj">item</dt>
\r
523 <dd>アイテムデータを持つオブジェクト</dd>
\r
527 <td>PreComment</td>
\r
530 <dt class="ref">comment</dt>
\r
531 <dd>コメントデータを持つ連想配列</dd>
\r
535 <td>PostComment</td>
\r
538 <dt class="ref">comment</dt>
\r
539 <dd>コメントデータを持つ連想配列</dd>
\r
543 <td>PreDateHead</td>
\r
544 <td>日付ヘッダーのパース前</td>
\r
546 <dt class="obj ref">blog</dt>
\r
547 <dd><code>BLOG</code> オブジェクト</dd>
\r
548 <dt class="ro">timestamp</dt>
\r
549 <dd>日付ヘッダーのタイムスタンプ</dd>
\r
553 <td>PostDateHead</td>
\r
554 <td>日付ヘッダーのパース後</td>
\r
556 <dt class="obj ref">blog</dt>
\r
557 <dd><code>BLOG</code> オブジェクト</dd>
\r
558 <dt class="ro">timestamp</dt>
\r
559 <dd>日付ヘッダーのタイムスタンプ</dd>
\r
563 <td>PreDateFoot</td>
\r
564 <td>日付フッターのパース前</td>
\r
566 <dt class="ref obj">blog</dt>
\r
567 <dd><code>BLOG</code> オブジェクト</dd>
\r
568 <dt class="ro">timestamp</dt>
\r
569 <dd>日付フッターのタイムスタンプ</dd>
\r
573 <td>PostDateFoot</td>
\r
574 <td>日付フッターのパース後</td>
\r
576 <dt class="ref obj">blog</dt>
\r
577 <dd><code>BLOG</code> オブジェクト</dd>
\r
578 <dt class="ro">timestamp</dt>
\r
579 <dd>日付フッターのタイムスタンプ</dd>
\r
583 <td>LoginSuccess</td>
\r
586 <dt class="obj ref">member</dt>
\r
587 <dd><code>MEMBER</code> オブジェクト</dd>
\r
591 <td>LoginFailed</td>
\r
594 <dt class="ro">username</dt>
\r
595 <dd>ログイン時に使われたユーザー名</dd>
\r
602 <dt class="ro">username</dt>
\r
603 <dd>ログアウト時のユーザー名</dd>
\r
607 <td>PreBlogContent</td>
\r
608 <td>blogの内容がスキン変数を通して挿入される前</td>
\r
610 <dt class="obj ref">blog</dt>
\r
611 <dd><code>BLOG</code> オブジェクト</dd>
\r
612 <dt class="ro">type</dt>
\r
613 <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
\r
614 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
\r
618 <td>PostBlogContent</td>
\r
619 <td>blogの内容がスキン変数を通して挿入された後</td>
\r
621 <dt class="obj ref">blog</dt>
\r
622 <dd><code>BLOG</code> オブジェクト</dd>
\r
623 <dt class="ro">type</dt>
\r
624 <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
\r
625 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist') </dd>
\r
629 <td>PreAddComment</td>
\r
630 <td>コメントがデータベースに追加される前</td>
\r
632 <dt class="ref">comment</dt>
\r
633 <dd>コメントデータ(連想配列)</dd>
\r
637 <td>PostAddComment</td>
\r
638 <td>コメントがデータベースに追加された後</td>
\r
640 <dt class="ref">comment</dt>
\r
641 <dd>コメントデータ(連想配列)</dd>
\r
642 <dt class="ref">commentid</dt>
\r
647 <td>PostRegister</td>
\r
648 <td>新規ユーザーの登録後</td>
\r
650 <dt class="obj ref">member</dt>
\r
651 <dd>新しい<code>MEMBER</code> オブジェクト</dd>
\r
655 <td>PostAddItem</td>
\r
656 <td>アイテムがデータベースに追加された後</td>
\r
658 <dt class="ro">itemid</dt>
\r
659 <dd>データベースに出来た新しい itemid</dd>
\r
663 <td>PreAddItem</td>
\r
664 <td>アイテムがデータベースに追加される直前</td>
\r
666 <dt class="ref">title</dt>
\r
668 <dt class="ref">body</dt>
\r
670 <dt class="ref">more</dt>
\r
672 <dt class="ref obj">blog</dt>
\r
673 <dd><code>BLOG</code> オブジェクト</dd>
\r
674 <dt class="ref">authorid</dt>
\r
676 <dt class="ref">timestamp</dt>
\r
677 <dd>UNIX タイムスタンプ</dd>
\r
678 <dt class="ref">closed</dt>
\r
679 <dd>1 (コメント不可) or 0 (コメント可)</dd>
\r
680 <dt class="ref">draft</dt>
\r
681 <dd>1 (ドラフト) or 0 (非ドラフト)</dd>
\r
682 <dt class="ref">catid</dt>
\r
687 <td>PreUpdateItem</td>
\r
688 <td>データベースにあるアイテムが更新される直前</td>
\r
690 <dt class="ro">itemid</dt>
\r
692 <dt class="ref">title</dt>
\r
694 <dt class="ref">body</dt>
\r
696 <dt class="ref">more</dt>
\r
698 <dt class="ref obj">blog</dt>
\r
699 <dd><code>BLOG オブジェクト</code> object</dd>
\r
700 <dt class="ref">closed</dt>
\r
701 <dd>1 (コメント不可) or 0 (コメント可)</dd>
\r
702 <dt class="ref">catid</dt>
\r
707 <td>PrepareItemForEdit</td>
\r
708 <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
\r
710 <dt class="ref">item</dt>
\r
711 <dd>アイテムデータを持つ連想配列</dd>
\r
715 <td>PreUpdateComment</td>
\r
716 <td>コメントが更新され、データベースに保存される直前</td>
\r
718 <dt class="ref">body</dt>
\r
723 <td>PrepareCommentForEdit</td>
\r
724 <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
\r
726 <dt class="ref">comment</dt>
\r
727 <dd>コメントデータ(連想配列)</dd>
\r
731 <td>PrePluginOptionsEdit</td>
\r
733 (v2.0b) 'プラグインオプションの編集'フォームが生成される前<br />
\r
734 (v2.2) パラメータ追加</td>
\r
736 <dt class="ro">context</dt>
\r
737 <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>category</code>のいずれか</dd>
\r
738 <dt class="ref">options</dt>
\r
739 <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要) </dd>
\r
740 <dt class="ro">plugid</dt>
\r
741 <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>
\r
742 <dt class="ro">contextid</dt>
\r
743 <dd>コンテクスト ID (blogid, memberid, catid コンテクストによる)</dd>
\r
748 <td>PostPluginOptionsUpdate</td>
\r
750 (v2.0b) プラグインオプションの更新後<br />
\r
751 (v2.2) コンテクストによって異なるパラメータ</td>
\r
753 <dt class="ro">context</dt>
\r
754 <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code> or <code>category</code></dd>
\r
755 <dt class="ro">plugid</dt>
\r
756 <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>
\r
757 <dt class="ro">blogid</dt>
\r
758 <dd>(v2.2) blog ID (blog コンテクスト)</dd>
\r
759 <dt class="ref obj">blog</dt>
\r
760 <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>
\r
761 <dt class="ro">memberid</dt>
\r
762 <dd>(v2.2) member ID (member コンテクスト)</dd>
\r
763 <dt class="ref obj">member</dt>
\r
764 <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>
\r
765 <dt class="ro">catid</dt>
\r
766 <dd>(v2.2) category ID (category コンテクスト)</dd>
\r
771 <td>PostAuthentication</td>
\r
772 <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>
\r
774 <dt class="ro">loggedIn</dt>
\r
775 <dd><code>$member->isLoggedIn()</code>の戻り値</dd>
\r
779 <td>PreAddItemForm</td>
\r
780 <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>
\r
782 <dt class="ref">contents</dt>
\r
783 <dd>連想配列への参照。そのうちの'title',
\r
784 'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>
\r
785 <dt class="ref obj">blog</dt>
\r
786 <dd><code>BLOG</code> オブジェクトへの参照</dd>
\r
790 <td>AddItemFormExtras</td>
\r
791 <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>
\r
793 <dt class="ref obj">blog</dt>
\r
794 <dd><code>BLOG</code> オブジェクトへの参照</dd>
\r
798 <td>EditItemFormExtras</td>
\r
800 (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br />
\r
802 あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。 <pre class="example"><code><h3>プラグイン名</h3>
\r
803 <p>追加フォームの内容</p></code></pre>
\r
804 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
\r
806 <dt class="ref obj">blog</dt>
\r
807 <dd><code>BLOG</code> オブジェクトへの参照</dd>
\r
808 <dt class="ro">variables</dt>
\r
810 (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid',
\r
811 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid',
\r
812 'timestamp', 'karmapos', 'karmaneg', 'catid'
\r
814 <dt class="ro">itemid</dt>
\r
815 <dd>アイテム IDへのショートカット</dd>
\r
819 <td>BlogSettingsFormExtras</td>
\r
820 <td>(v2.0) blog設定ページにフォームを追加可能<br /><br />
\r
821 あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。 <pre class="example"><code><h4>プラグイン名</h4>
\r
822 <form method="post" action="..."><p>
\r
823 追加フォームの内容</p></form></code></pre>
\r
824 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
\r
826 <dt class="obj ref">blog</dt>
\r
827 <dd><code>BLOG</code> オブジェクトへの参照</dd>
\r
831 <td>PreDeleteItem</td>
\r
832 <td>(v2.0) アイテムがデータベースから削除される直前</td>
\r
834 <dt class="ro">itemid</dt>
\r
835 <dd>削除されるアイテムID</dd>
\r
839 <td>PostDeleteItem</td>
\r
840 <td>(v2.0) アイテムがデータベースから削除された直後</td>
\r
842 <dt class="ro">itemid</dt>
\r
843 <dd>削除されたアイテムID</dd>
\r
847 <td>PreDeleteCategory</td>
\r
848 <td>(v2.0) カテゴリーがデータベースから削除される直前</td>
\r
850 <dt class="ro">catid</dt>
\r
851 <dd>削除されるカテゴリー ID</dd>
\r
855 <td>PostDeleteCategory</td>
\r
856 <td>(v2.0) カテゴリーがデータベースから削除された直後</td>
\r
858 <dt class="ro">catid</dt>
\r
859 <dd>削除されたカテゴリー ID</dd>
\r
863 <td>PreDeleteBlog</td>
\r
864 <td>(v2.0) blogがデータベースから削除される直前</td>
\r
866 <dt class="ro">blogid</dt>
\r
867 <dd>削除されるblogID</dd>
\r
871 <td>PostDeleteBlog</td>
\r
872 <td>(v2.0) blogがデータベースから削除された直後</td>
\r
874 <dt class="ro">blogid</dt>
\r
875 <dd>削除されたblogID</dd>
\r
879 <td>PreDeleteMember</td>
\r
880 <td>(v2.0) メンバーがデータベースから削除される直前</td>
\r
882 <dt class="ref obj">member</dt>
\r
883 <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
\r
887 <td>PostDeleteMember</td>
\r
888 <td>(v2.0) メンバーがデータベースから削除された直後</td>
\r
890 <dt class="ref obj">member</dt>
\r
891 <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
\r
895 <td>PreDeleteTeamMember</td>
\r
896 <td>(v2.0) メンバーがweblogチームから削除される直前</td>
\r
898 <dt class="ref obj">member</dt>
\r
899 <dd><code>MEMBER</code> オブジェクトへの参照</dd>
\r
900 <dt class="ro">blogid</dt>
\r
905 <td>PostDeleteTeamMember</td>
\r
906 <td>(v2.0) メンバーがweblogチームから削除された直後</td>
\r
908 <dt class="ref obj">member</dt>
\r
909 <dd><code>MEMBER</code> オブジェクトへの参照</dd>
\r
910 <dt class="ro">blogid</dt>
\r
915 <td>PreDeleteComment</td>
\r
916 <td>(v2.0) コメントがデータベースから削除される直前</td>
\r
918 <dt class="ro">commentid</dt>
\r
919 <dd>削除されるコメントID</dd>
\r
923 <td>PostDeleteComment</td>
\r
924 <td>(v2.0) コメントがデータベースから削除された直後</td>
\r
926 <dt class="ro">commentid</dt>
\r
927 <dd>削除されたコメントID</dd>
\r
931 <td>ActionLogCleared</td>
\r
932 <td>(v2.0) アクションログが消去された後</td>
\r
936 <td>PreDeleteTemplate</td>
\r
937 <td>(v2.0) テンプレートがデータベースから削除される直前</td>
\r
939 <dt class="ro">templateid</dt>
\r
940 <dd>削除されるテンプレートID</dd>
\r
944 <td>PostDeleteTemplate</td>
\r
945 <td>(v2.0) テンプレートがデータベースから削除された直後</td>
\r
947 <dt class="ro">templateid</dt>
\r
948 <dd>削除されたテンプレートID</dd>
\r
952 <td>PreDeleteSkin</td>
\r
953 <td>(v2.0) スキンがデータベースから削除される直前</td>
\r
955 <dt class="ro">skinid</dt>
\r
956 <dd>削除されるスキンID</dd>
\r
960 <td>PostDeleteSkin</td>
\r
961 <td>(v2.0) スキンがデータベースから削除された直後</td>
\r
963 <dt class="ro">skinid</dt>
\r
964 <dd>削除されたスキンID</dd>
\r
968 <td>PreDeletePlugin</td>
\r
969 <td>(v2.0) プラグインがデータベースから削除される直前</td>
\r
971 <dt class="ro">plugid</dt>
\r
972 <dd>削除されるプラグインID</dd>
\r
976 <td>PostDeletePlugin</td>
\r
977 <td>(v2.0) プラグインがデータベースから削除された直後</td>
\r
979 <dt class="ro">plugid</dt>
\r
980 <dd>削除されたプラグインID</dd>
\r
984 <td>PreDeleteBan</td>
\r
985 <td>(v2.0) 禁止IPがデータベースから削除される直前</td>
\r
987 <dt class="ro">blogid</dt>
\r
988 <dd>禁止IPが削除されるblogのID</dd>
\r
989 <dt class="ro">iprange</dt>
\r
990 <dd>禁止されたIPレンジ</dd>
\r
994 <td>PostDeleteBan</td>
\r
995 <td>(v2.0) 禁止IPがデータベースから削除された直後</td>
\r
997 <dt class="ro">blogid</dt>
\r
998 <dd>禁止IPが削除されたblogのID</dd>
\r
999 <dt class="ro">iprange</dt>
\r
1000 <dd>禁止されたIPレンジ</dd>
\r
1004 <td>PreAddCategory</td>
\r
1005 <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>
\r
1007 <dt class="ref obj">blog</dt>
\r
1008 <dd><code>BLOG</code> オブジェクトの参照</dd>
\r
1009 <dt class="ref">name</dt>
\r
1010 <dd>新しいカテゴリー名</dd>
\r
1011 <dt class="ref">description</dt>
\r
1012 <dd>新しいカテゴリーの説明</dd>
\r
1016 <td>PostAddCategory</td>
\r
1017 <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>
\r
1019 <dt class="ref obj">blog</dt>
\r
1020 <dd><code>BLOG</code> オブジェクトへの参照</dd>
\r
1021 <dt class="ro">name</dt>
\r
1022 <dd>新しいカテゴリー名</dd>
\r
1023 <dt class="ro">description</dt>
\r
1024 <dd>新しいカテゴリーの説明</dd>
\r
1025 <dt class="ro">catid</dt>
\r
1026 <dd>新しいカテゴリー ID</dd>
\r
1030 <td>PreAddBlog</td>
\r
1031 <td>(v2.0) 新しいblogが生成される直前</td>
\r
1033 <dt class="ref">name</dt>
\r
1034 <dd>新しい blog名</dd>
\r
1035 <dt class="ref">shortname</dt>
\r
1036 <dd>新しい blogの短縮名</dd>
\r
1037 <dt class="ref">timeoffset</dt>
\r
1038 <dd>新しい blogのタイムオフセット</dd>
\r
1039 <dt class="ref">description</dt>
\r
1040 <dd>新しい blogの説明</dd>
\r
1041 <dt class="ref">defaultskin</dt>
\r
1042 <dd>新しいblogのデフォルトスキンのID</dd>
\r
1046 <td>PostAddBlog</td>
\r
1047 <td>(v2.0) 新しいblogが生成された直後</td>
\r
1049 <dt class="ref obj">blog</dt>
\r
1050 <dd>新しい<code>BLOG</code> オブジェクト</dd>
\r
1054 <td>PreAddPlugin</td>
\r
1055 <td>(v2.0) プラグインが追加される直前</td>
\r
1057 <dt class="ref">file</dt>
\r
1058 <dd>新しいプラグインのファイル名</dd>
\r
1062 <td>PostAddPlugin</td>
\r
1063 <td>(v2.0) プラグインが追加された直後</td>
\r
1065 <dt class="ref obj">plugin</dt>
\r
1066 <dd>新しく追加されたプラグインのオブジェクト</dd>
\r
1070 <td>PreAddTeamMember</td>
\r
1071 <td>(v2.0) メンバーがblogチームに追加される直前</td>
\r
1073 <dt class="ref obj">blog</dt>
\r
1074 <dd><code>BLOG</code> オブジェクト</dd>
\r
1075 <dt class="ref obj">member</dt>
\r
1076 <dd><code>MEMBER</code> オブジェクト</dd>
\r
1077 <dt class="ref">admin</dt>
\r
1078 <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
\r
1082 <td>PostAddTeamMember</td>
\r
1083 <td>(v2.0) メンバーがblogチームに追加された直後</td>
\r
1085 <dt class="ref obj">blog</dt>
\r
1086 <dd><code>BLOG</code> オブジェクト</dd>
\r
1087 <dt class="ref obj">member</dt>
\r
1088 <dd><code>MEMBER</code> オブジェクト</dd>
\r
1089 <dt class="ro">admin</dt>
\r
1090 <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
\r
1094 <td>PreAddTemplate</td>
\r
1095 <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>
\r
1097 <dt class="ref">name</dt>
\r
1098 <dd>新しいテンプレート名</dd>
\r
1099 <dt class="ref">description</dt>
\r
1100 <dd>新しいテンプレートの説明</dd>
\r
1104 <td>PostAddTemplate</td>
\r
1105 <td>(v2.0) 新しいテンプレートが生成された直後</td>
\r
1107 <dt class="ro">name</dt>
\r
1108 <dd>新しいテンプレート名</dd>
\r
1109 <dt class="ro">description</dt>
\r
1110 <dd>新しいテンプレートの説明</dd>
\r
1111 <dt class="ro">templateid</dt>
\r
1112 <dd>新しいテンプレートID</dd>
\r
1116 <td>PreAddSkin</td>
\r
1117 <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>
\r
1119 <dt class="ref">name</dt>
\r
1121 <dt class="ref">description</dt>
\r
1122 <dd>新しいスキン名の説明</dd>
\r
1123 <dt class="ref">type</dt>
\r
1124 <dd>スキンのコンテントタイプ</dd>
\r
1125 <dt class="ref">includeMode</dt>
\r
1126 <dd>新しいスキンのインクルードモード</dd>
\r
1127 <dt class="ref">includePrefix</dt>
\r
1128 <dd>新しいスキンのインクルードプレフィックス</dd>
\r
1132 <td>PostAddSkin</td>
\r
1133 <td>(v2.0) 新しいスキンが生成された直後</td>
\r
1135 <dt class="ro">name</dt>
\r
1137 <dt class="ro">description</dt>
\r
1138 <dd>新しいスキンの説明</dd>
\r
1139 <dt class="ro">type</dt>
\r
1140 <dd>スキンのコンテントタイプ</dd>
\r
1141 <dt class="ro">includeMode</dt>
\r
1142 <dd>新しいスキンのインクルードモード</dd>
\r
1143 <dt class="ro">includePrefix</dt>
\r
1144 <dd>新しいスキンのインクルードプレフィックス</dd>
\r
1145 <dt class="ro">skinid</dt>
\r
1150 <td>PreAddBan</td>
\r
1151 <td>(v2.0) 新しい禁止IPが追加される直前</td>
\r
1153 <dt class="ref">blogid</dt>
\r
1155 <dt class="ref">iprange</dt>
\r
1156 <dd>禁止されたIPレンジ</dd>
\r
1157 <dt class="ref">reason</dt>
\r
1158 <dd>禁止された理由を記述したテキストメッセージ</dd>
\r
1162 <td>PostAddBan</td>
\r
1163 <td>(v2.0) 新しい禁止IPが追加された直後</td>
\r
1165 <dt class="ro">blogid</dt>
\r
1167 <dt class="ro">iprange</dt>
\r
1168 <dd>禁止されたIPレンジ</dd>
\r
1169 <dt class="ro">reason</dt>
\r
1170 <dd>禁止された理由を記述したテキストメッセージ</dd>
\r
1175 <td>PreMoveItem</td>
\r
1176 <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>
\r
1178 <dt class="ref">itemid</dt>
\r
1180 <dt class="ref">destblogid</dt>
\r
1181 <dd>移動先のblogID</dd>
\r
1182 <dt class="ref">destcatid</dt>
\r
1183 <dd>移動先のカテゴリーID</dd>
\r
1187 <td>PostMoveItem</td>
\r
1188 <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>
\r
1190 <dt class="ro">itemid</dt>
\r
1192 <dt class="ro">destblogid</dt>
\r
1193 <dd>新しいblogID</dd>
\r
1194 <dt class="ro">destcatid</dt>
\r
1195 <dd>新しいカテゴリーID</dd>
\r
1199 <td>PreMoveCategory</td>
\r
1200 <td>(v2.0) カテゴリーが他のblogに移される直前</td>
\r
1202 <dt class="ref">catid</dt>
\r
1204 <dt class="ref obj">sourceblog</dt>
\r
1205 <dd>移動元の<code>BLOG</code> オブジェクト</dd>
\r
1206 <dt class="ref obj">destblog</dt>
\r
1207 <dd>移動先の<code>BLOG</code> オブジェクト</dd>
\r
1211 <td>PostMoveCategory</td>
\r
1212 <td>(v2.0) カテゴリーが他のblogに移された直後</td>
\r
1214 <dt class="ro">catid</dt>
\r
1216 <dt class="ref obj">sourceblog</dt>
\r
1217 <dd>移動元の<code>BLOG</code> オブジェクト</dd>
\r
1218 <dt class="ref obj">destblog</dt>
\r
1219 <dd>移動先の<code>BLOG</code> オブジェクト</dd>
\r
1223 <td>MemberSettingsFormExtras</td>
\r
1224 <td>(v2.0) メンバー設定ページにフォームを追加可能<br /><br />
\r
1225 あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
\r
1226 <pre class="example"><code><h4>プラグイン名</h4>
\r
1227 <form method="post" action="..."><p>
\r
1228 追加フォームの内容</p></form></code></pre>
\r
1229 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
\r
1231 <dt class="ref obj">member</dt>
\r
1232 <dd><code>MEMBER</code> オブジェクトへの参照</dd>
\r
1236 <td>GeneralSettingsFormExtras</td>
\r
1237 <td>(v2.0) 一般設定ページにフォームを追加可能<br />
\r
1239 あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
\r
1240 <pre class="example"><code><h4>プラグイン名</h4>
\r
1241 <form method="post" action="..."><p>
\r
1242 追加フォームの内容</p></form></code></pre>
\r
1243 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
\r
1247 <td>AdminPrePageHead</td>
\r
1248 <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>
\r
1250 <dt class="ref">extrahead</dt>
\r
1251 <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
\r
1252 <dt class="ro">action</dt>
\r
1253 <dd>現在実行されているアクション、またはページタイプ</dd>
\r
1257 <td>AdminPrePageFoot</td>
\r
1258 <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>
\r
1260 <dt class="ro">action</dt>
\r
1263 現在実行されているアクション、またはページタイプ</td>
\r
1266 <td>PreSendContentType</td>
\r
1267 <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>
\r
1269 <dt class="ref">contentType</dt>
\r
1270 <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>
\r
1271 <dt class="ref">charset</dt>
\r
1272 <dd>キャラクターセット</dd>
\r
1273 <dt class="ro">pageType</dt>
\r
1274 <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>
\r
1278 <td>QuickMenu</td>
\r
1279 <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>
\r
1281 <dt class="ref">options</dt>
\r
1286 <td>BookmarkletExtraHead</td>
\r
1287 <td>(v2.5) ブックマークレット
\r
1288 XHTMLコードのヘッド領域内。</td>
\r
1290 <dt class="ref">extrahead</dt>
\r
1291 <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
\r
1338 <h1>オプションを保存する<a name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
1340 <p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>
\r
1342 <p>オプションは異なったコンテクストで利用可能です。</p>
\r
1345 <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>
\r
1346 <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>
\r
1347 <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>
\r
1348 <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>
\r
1353 <p>オプションにはいくつかのタイプが提供されています。</p>
\r
1357 <dd>シンプルなテキスト</dd>
\r
1359 <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>
\r
1361 <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>
\r
1362 <dt>textarea (v2.2)</dt>
\r
1363 <dd>複数行のテキストフィールド</dd>
\r
1364 <dt>select (v2.2)</dt>
\r
1365 <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 </dd>
\r
1372 <li>オプション名は最大20文字です。</li>
\r
1373 <li>オプションの説明文は最大255文字です。</li>
\r
1374 <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>
\r
1379 <h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
\r
1381 <p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>
\r
1391 <td>オプション編集画面で表示される説明文</td>
\r
1394 <td>オプションタイプ(前出)</td>
\r
1396 <td>$defValue</td>
\r
1399 <td>$typeExtras</td>
\r
1400 <td>オプションタイプの追加情報(前出)</td>
\r
1403 <h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
\r
1405 <p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
\r
1407 <h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
\r
1409 <p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
\r
1411 <h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
\r
1413 <p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
\r
1415 <h3>setOption($name, $value)</h3>
\r
1417 <p>すでにデータベースに存在するオプションの値を変更します。</p>
\r
1430 <h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>
\r
1432 <p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
\r
1434 <h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>
\r
1436 <p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
\r
1438 <h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>
\r
1440 <p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
\r
1442 <h3>getOption($name)</h3>
\r
1444 <p>データベース内のオプションの値を返します。</p>
\r
1454 <h3>[v2.2] getBlogOption($blogid, $name)</h3>
\r
1456 <p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>
\r
1458 <h3>[v2.2] getCategoryOption($catid, $name)</h3>
\r
1460 <p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。<br />
\r
1463 <h3>[v2.2] getMemberOption($memberid, $name)</h3>
\r
1465 <p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。</p>
\r
1467 <h3>deleteOption($name)</h3>
\r
1469 <p>データベースからオプションを削除します。</p>
\r
1479 <h3>[v2.2] deleteBlogOption($name)</h3>
\r
1481 <p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>
\r
1483 <h3>[v2.2] deleteCategoryOption($name)</h3>
\r
1485 <p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>
\r
1487 <h3>[v2.2] deleteMemberOption($name)</h3>
\r
1489 <p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>
\r
1491 <h3>[v2.2] getAllBlogOptions($name)</h3>
\r
1493 <p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>
\r
1495 <h3>[v2.2] getAllCategoryOptions($name)</h3>
\r
1497 <p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>
\r
1499 <h3>[v2.2] getAllMemberOptions($name)</h3>
\r
1501 <p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>
\r
1503 <div class="note">
\r
1504 <b>注:</b> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。</div>
\r
1506 <h1>データベース・テーブル<a name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
1508 <h2>Nucleusテーブルへのアクセス</h2>
\r
1510 <p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>
\r
1513 <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>
\r
1514 <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>
\r
1517 <p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>
\r
1519 <pre class="example"><code><?
\r
1521 // プラグインがNucleusバージョン2.0以下と互換性を持つために必要
\r
1522 if (!function_exists('sql_table'))
\r
1524 function sql_table($name) {
\r
1525 return 'nucleus_' . $name;
\r
1529 class NP_HelloWorld extends NucleusPlugin {
\r
1533 ?></code></pre>
\r
1537 <p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>
\r
1541 <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を
\r
1542 <code>sql_table('plug_plugname')</code> で生成してください。 </li>
\r
1543 <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>
\r
1544 <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code> を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- >db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます(訳者注:理解不足。別接続のリンクを同時に持てるということ?)。</li>
\r
1545 <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>
\r
1548 <h1>プラグイン管理エリア<a name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
\r
1550 <p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>
\r
1554 <p>管理エリアを提供するには、次のステップが必要です。</p>
\r
1557 <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>
\r
1559 そのディレクトリで、次のような<strong>index.php</strong>を用意します。
\r
1560 <pre><code><?php
\r
1562 // if your 'plugin' directory is not in the default location,
\r
1563 // edit this variable to point to your site directory
\r
1564 // (where config.php is)
\r
1565 $strRel = '../../../';
\r
1567 include($strRel . 'config.php');
\r
1568 if (!$member->isLoggedIn())
\r
1569 doError('You\'re not logged in.');
\r
1571 include($DIR_LIBS . 'PLUGINADMIN.php');
\r
1573 // create the admin area page
\r
1574 $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');
\r
1575 $oPluginAdmin->start();
\r
1577 echo '<h2>プラグイン名</h2>';
\r
1579 echo '<p><strong>ページ内容</strong><p>';
\r
1581 $oPluginAdmin->end();
\r
1583 ?></code></pre>
\r
1586 プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。
\r
1587 <pre><code>function event_QuickMenu(&$data) {
\r
1591 'title' => '<strong>プラグイン名</strong>',
\r
1592 'url' => $this->getAdminURL(),
\r
1593 'tooltip' => '<strong>ツールチップテキスト</strong>'
\r
1599 プラグイン側に次の関数を記述します。
\r
1600 <pre><code>function hasAdminArea()
\r
1610 <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>
\r
1611 <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>
\r
1612 <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>
\r
1615 <h2>PluginAdmin クラス</h2>
\r
1617 <p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin->plugin</code> でプラグインのインスタンスにアクセスできます。</p>
\r