OSDN Git Service

表記統一版
[nucleus-jp/nucleus-jp-ancient.git] / utf8 / nucleus / documentation / devdocs / plugins.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
3 <head>
4         <!-- $Id: plugins.html,v 1.9 2007-02-04 06:28:45 kimitake Exp $ -->
5         <!-- $NucleusJP: plugins.html,v 1.8 2006/07/17 20:02:50 kimitake Exp $ -->
6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
7         <title>Nucleus - プラグイン API</title>
8         <link rel="stylesheet" type="text/css" href="styles/manual.css" />
9         <style type="text/css">
10                 /* refence parameters (greenish) */
11                 .ref {
12                         background-color: #afa;
13                         color: #000;
14                 }
15
16                 /* object parameters */
17                 .obj {
18                         color: #00f;
19                 }
20                 .obj:after {
21                         content: " (object)";
22                 }
23
24                 /* read-only parameters (non-ref; reddish) */
25                 .ro {
26                         background-color: #faa;
27                         color: #000;
28                 }
29         </style>
30 </head>
31 <body>
32
33 <p class="heading">&nbsp;</p>
34 <div class="heading">
35 プラグイン API
36 <i>2005年7月27日</i>
37 </div>
38
39 <div class="note-trans"><strong>訳者注:</strong> 
40         <ul>
41                 <li>このドキュメントの原文は以下のURLにあります。<br />
42                  <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>
43             <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>
44         </ul>
45 </div>
46
47 <div class="note"><strong>注:</strong> 
48         <ul>
49                 <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin
50           Development Forum</a> (<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>
51                 <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>
52         </ul>
53 </div>
54
55 <h1>はじめに</h1>
56
57 <p>
58 <a href="./index.html">開発者向けドキュメントの目次へ戻る</a>
59 </p>
60
61 <p>
62 このドキュメントはNucleusプラグインの作り方についての解説です。 
63 </p>
64
65 <h1><a name="toc"></a><a name="top"></a>目次</h1>
66
67 <ul>
68         <li><a href="#introduction">イントロダクション</a></li>
69         <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>
70         <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>
71         <li><a href="#skinvars"><code>&lt;%plugin(...)%&gt;</code> スキン変数</a></li>
72         <li><a href="#templatevars"><code>&lt;%plugin(...)%&gt;</code> テンプレート変数</a></li>        
73         <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>
74         <li><a href="#events">イベントとイベント登録の仕方</a></li>
75         <li><a href="#options">オプションを保存する</a></li>
76         <li><a href="#tables">データベース・テーブル</a></li>
77         <li><a href="#admin">プラグイン管理エリアの提供</a></li>
78         <li><a href="#help">ヘルプページの提供</a></li>
79         <li><a href="#dependency">プラグイン依存チェック</a></li>
80 <!--    <li><a href="#parser">Using the <code>PARSER</code> class</a></li>
81         <li><a href="#"></a></li>
82         <li><a href="#"></a></li>
83         <li><a href="#"></a></li>
84         <li><a href="#"></a></li>-->
85 </ul>
86
87 <h1>イントロダクション <a name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
88
89 <p>
90 Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。
91 </p>
92
93 <p>
94 プラグインの利点は以下のとおりです。</p>
95
96 <ul>
97         <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>
98         <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>
99 </ul>
100
101 <p>
102 すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code>  になるでしょう。プラグインファイル名は <code>NP<i>_name</i>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。</p>
103
104 <div class="note">
105 <b>注:</b> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。</div>
106
107
108
109
110 <h1>はじめてプラグインを書いてみる<a name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
111
112 <p>
113 では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。</p>
114
115 <pre class="example"><code>&lt;?php
116
117 class NP_HelloWorld extends NucleusPlugin
118 {
119         // プラグインの名前
120         function getName()
121         {
122                 return 'Hello World';
123         }
124
125         // プラグインの作者
126         function getAuthor()
127         {
128                 return 'Wouter Demuynck';
129         }
130
131         // プラグインのサイトURL
132         // mailto:foo@bar.com の形式も可
133         function getURL()
134         {
135                 return 'http://nucleuscms.org/';
136         }
137
138         // プラグインのバージョン
139         function getVersion()
140         {
141                 return '1.0';
142         }
143
144         // インストール済みのプラグインリストに表示される説明文
145         function getDescription()
146         {
147                 return 'Just a sample plugin.';
148         }
149
150         function doSkinVar($skinType)
151         {
152                 echo 'Hello World!';
153         }
154
155         function supportsFeature ($what)
156         {
157                 switch ($what)
158                 {
159                         case 'SqlTablePrefix':
160                                 return 1;
161                         default:
162                                 return 0;
163                 }
164         }
165
166 }
167 ?&gt;</code></pre>
168
169 <ol>
170         <li>
171                 このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?&gt;</code> の後や、最初の <code>&lt;?</code> の前にスペースがないことを確認しましょう</em>。ところでNP は &quot;Nucleus Plugin&quot; って意味ですよ :-) 念のため。
172         </li>
173         <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>
174         <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>
175         <li>あなたのスキンの1つを編集し、実際のページに表示する箇所に次の文を挿入します。
176           <pre class="example"><code>&lt;%HelloWorld%&gt;</code></pre>
177         注意:カッコ内の名称 (<code>HelloWorld</code>) は大文字小文字を識別します!</li>
178         <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に &quot;Hello
179   World&quot; と見えますね?</li>
180 </ol>
181
182 <p>ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。</p>
183
184
185 <h1>NucleusPlugin クラスの概要 <a name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
186
187 <p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>
188
189 <p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>
190
191 <table summary="An overview of the redefinable methods in the class NucleusPlugin">
192         <caption>
193         <code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)
194         </caption>
195         <tr>
196                 <th>メソッド名</th><th>説明</th>
197         </tr>
198         <tr>
199                 <td><code>getName()</code></td>
200                 <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>           
201         </tr>
202         <tr>
203                 <td><code>getAuthor()</code></td>
204                 <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>          
205         </tr>
206         <tr>
207                 <td><code>getURL()</code></td>
208                 <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>             
209         </tr>
210         <tr>
211                 <td><code>getDescription()</code></td>
212                 <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>             
213         </tr>
214         <tr>
215                 <td><code>getVersion()</code></td>
216                 <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>             
217         </tr>
218         <tr>
219                 <td><code>getMinNucleusVersion()</code></td>
220                 <td>(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>
221         </tr>
222         <tr>
223                 <td><code>getMinNucleusPatchLevel()</code></td>
224                 <td>(v3.1) 最低限必要なNucleusのバージョン(<code>getMinNucleusVersion</code>)での、最低限必要なパッチレベルを返します。デフォルトは <code>0</code> を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。</td>
225         </tr>
226         <tr>
227                 <td><code>init()</code></td>
228                 <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>
229         </tr>
230         <tr>
231                 <td><code>doSkinVar($skinType)</code></td>
232                 <td><code>&lt;%plugin(...)%&gt;</code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>,
233       <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>              
234         </tr>
235         <tr>
236                 <td><code>doTemplateVar(&amp;$item)</code></td>
237                 <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item
238                     header/body/footer</code> と <code>dateheader/footer</code>)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
239       <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>               
240         </tr>
241         <tr>
242                 <td><code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code></td>
243                 <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
244       <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code> 
245       メソッドの実装に関する詳細情報はこちら</a></td>                
246         </tr>   
247         <tr>
248                 <td><code>doAction($type)</code></td>
249                 <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。.
250                   これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの
251                   <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No
252           Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>         
253         </tr>
254         <tr>
255                 <td><code>install()</code></td>
256                 <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>
257         </tr>
258         <tr>
259                 <td><code>unInstall()</code></td>
260                 <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>
261         </tr>
262         <tr>
263                 <td><code>getEventList()</code></td>
264                 <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code>        の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報
265           はこちら</a></td>         
266         </tr>
267         <tr>
268                 <td><code>getTableList()</code></td>
269                 <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>
270         </tr>
271         <tr>
272                 <td><code>hasAdminArea()</code></td>
273                 <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>
274         </tr>
275         <tr>
276                 <td><code>getPluginDep()</code></td>
277                 <td>(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。<a href="#dependency">プラグイン依存に関する詳細情報はこちら</a></td>
278         </tr>
279 </table>
280
281 <p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this-&gt;functionName()</code>シンタックスを利用して呼び出します。</p>
282
283 <table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">
284         <caption>
285         <code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)
286         </caption>
287         <tr>
288                 <th>メソッド名</th>
289                 <th>説明</th>
290         </tr>
291         <tr>
292                 <td>
293                         <code>createOption(...)</code>
294                         <br /><code>createBlogOption(...)</code>(v2.2)
295                         <br /><code>createCategoryOption(...)</code>(v2.2)
296                         <br /><code>createMemberOption(...)</code>(v2.2)
297                         <br /><code>createItemOption(...)</code>(v3.2)
298                 </td>
299                 <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>              
300         </tr>
301         <tr>
302                 <td>
303                         <code>deleteOption(...)</code>
304                         <br /><code>deleteBlogOption(...)</code>(v2.2)
305                         <br /><code>deleteCategoryOption(...)</code>(v2.2)
306                         <br /><code>deleteMemberOption(...)</code>(v2.2)
307                         <br /><code>deleteItemOption(...)</code>(v3.2)
308                 </td>
309                 <td><a href="#options" title="More info on options">オプションを削除します。</a></td>               
310         </tr>
311         <tr>
312                 <td>
313                         <code>setOption(...)</code>
314                         <br /><code>setBlogOption(...)</code>(v2.2)
315                         <br /><code>setCategoryOption(...)</code>(v2.2)
316                         <br /><code>setMemberOption(...)</code>(v2.2)                         
317                         <br /><code>setItemOption(...)</code>(v3.2)
318                 </td>
319                 <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>              
320         </tr>
321         <tr>
322                 <td>
323                         <code>getOption(...)</code>
324                         <br /><code>getBlogOption(...)</code>(v2.2)
325                         <br /><code>getCategoryOption(...)</code>(v2.2)
326                         <br /><code>getMemberOption(...)</code>(v2.2)                          
327                         <br /><code>getItemOption(...)</code>(v3.2)
328                 </td>
329                 <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>         
330         </tr>
331         <tr>
332                 <td>
333                         <code>getAllBlogOptions(...)</code>(v2.2)
334                         <br /><code>getAllCategoryOptions(...)</code>(v2.2)
335                         <br /><code>getAllMemberOptions(...)</code>(v2.2)                              
336                         <br /><code>getAllItemOptions(...)</code>(v3.2)
337                 </td>
338                 <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>            
339         </tr>   
340         <tr>
341                 <td>
342                         <code>getBlogOptionTop(...)</code>(v3.2)
343                         <br /><code>getMemberOptionTop(...)</code>(v3.2)
344                         <br /><code>getCategoryOptionTop(...)</code>(v3.2)
345           <br /><code>getItemOptionTop(...)</code>(v3.2)
346                 </td>
347                 <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値のうちの最初の値を返します。</a></td>
348         </tr>
349         <tr>
350                 <td><code>getID()</code></td>
351                 <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>               
352         </tr>
353         <tr>
354                 <td><code>getAdminURL()</code></td>
355                 <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>              
356         </tr>
357         <tr>
358                 <td><code>getDirectory()</code></td>
359                 <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は&quot;<code>.../nucleus/plugins/<em>plugname</em>/</code>&quot;のようになります。</td>           
360         </tr>
361         <tr>
362                 <td><code>getShortName()</code></td>
363                 <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>              
364         </tr>
365
366 </table>
367
368 <h1>スキン変数<a name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
369
370 <h2>解説</h2>
371
372 <p>
373 独自のスキン変数を生成し、<code>&lt;%plugin(<em>PlugName,parameters</em>)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。</p>
374
375 <p>
376 スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。</p>
377
378 <pre class="example"><code>function doSkinVar($skinType)
379 function doSkinVar($skinType, $param1, $param2)
380 function doSkinVar($skinType, $skinVar, $param1, $param2)
381 function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>
382
383 <ul>
384         <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',
385   'search', 'imagepopup',  <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>
386         <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code>&lt;%plugin(PlugName,VarType)%&gt;</code>)。</li>
387         <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>
388 </ul>
389
390 <h2>ノート</h2>
391
392 <ul>
393         <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>
394 </ul>
395
396
397
398
399 <h1>テンプレート変数<a name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
400
401 <h2>解説</h2>
402
403 <p>
404 テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>
405
406 <ol>
407         <li>スキン内ではなくテンプレート内から呼ばれます。</li>
408         <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。
409     <ul>
410                         <li><code>doTemplateVar</code> メソッドは <code>&amp;$item</code> パラメータを取ります。</li>
411                         <li><code>doTemplateCommentsVar</code> メソッドは <code>&amp;$item</code> と <code>&amp;$comment</code> パラメータを取ります。</li>
412           </ul>
413                 <strong>&amp;マークに注意!</strong>
414         </li>
415 </ol>
416         
417 <p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code>&lt;%plugin(PlugName,parameters)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>)。</p>
418
419 <p>
420 デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。</p>
421
422 <p>
423 独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。</p>
424
425 <pre class="example"><code>function doTemplateVar(&amp;$item)
426 function doTemplateVar(&amp;$item, $param1, $param2)
427 function doTemplateVar(&amp;$item, $type, $param1, $param2)
428 function doTemplateVar(&amp;$item, $type, $param1 = 'default value')
429 function doTemplateCommentsVar(&amp;$item, &amp;$comment)
430 function doTemplateCommentsVar(&amp;$item, &amp;$comment, $param1, $param2)
431 function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1, $param2)
432 function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1 = 'default value')</code></pre>
433
434 <h2>ノート</h2>
435
436 <ul>
437         <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>
438 </ul>
439
440
441
442
443 <h1>アクション<a name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
444
445 <p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは
446 <code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>
447
448 <p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは
449 <code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>
450
451 <p>
452 <code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。</p>
453
454
455
456
457
458
459 <h1>イベント<a name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
460
461 <p>
462 Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。</p>
463
464 <h2>例</h2>
465
466 <p>
467 下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。</p>
468
469 <pre class="example"><code>class NP_Acronyms extends NucleusPlugin {
470   ...
471   function getEventList() { return array('PreAddComment'); }
472   ...
473   function event_PreAddComment(&amp;$data) {
474     // 頭字語 HTML を置き換え
475     $data['comment']['body'] = 
476         strreplace('HTML',
477                    '&lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;',
478                    $data['comment']['body']);
479   }
480 }
481 </code></pre>
482
483 <p>このプラグインはコメント中の'HTML'というテキストを'<code>&lt;acronym title=&quot;HyperText
484 Markup Language&quot;&gt;HTML&lt;/acronym&gt;</code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>
485
486 <h2>イベント登録の仕方</h2>
487
488 <p>イベント登録に必要なステップは以下になります。</p>
489
490 <ol>
491         <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>
492         <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>
493 </ol>
494
495 <p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>
496
497 <h2>パラメータ</h2>
498
499 <p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>
500
501 <p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>
502
503 <ul>
504         <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>
505         <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>
506 </ul>
507
508 <p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object
509 by ref</var>のように示されます。</p>
510
511 <h2>イベントリスト</h2>
512
513 <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">
514         <caption>
515         プラグインが登録できるイベント</caption>
516         <tr>
517                 <th>名前</th>
518                 <th>いつ</th>
519                 <th>パラメータ</th>
520         </tr>
521         <tr>
522                 <td>InitSkinParse</td>
523                 <td>スキンの初期化の直前</td>
524                 <td><dl>
525                         <dt class="obj ref">skin</dt>
526                         <dd>パースする<code>SKIN</code>オブジェクト</dd>
527                         <dt class="ro">type</dt>
528                         <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
529                         'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
530                 </dl></td>
531         </tr>
532         <tr>
533                 <td>PreSkinParse</td>
534                 <td>スキンのパースの直前</td>
535                 <td><dl>
536                         <dt class="obj ref">skin</dt>
537                         <dd>パースする<code>SKIN</code>オブジェクト</dd>
538                         <dt class="ro">type</dt>
539                         <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
540                   'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
541                         <dt class="ref">contents</dt>
542                         <dd>スキンの内容</dd>
543                 </dl></td>              
544         </tr>
545         <tr>
546                 <td>PostSkinParse</td>
547                 <td>スキンのパースの直後</td>
548                 <td><dl>
549                         <dt class="obj ref">skin</dt>
550                         <dd>パースする<code>SKIN</code>オブジェクト</dd>
551                         <dt class="ro">type</dt>
552                         <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search',
553                   'imagepopup', 'fileparser'のいずれか)</dd>
554                 </dl></td>              
555         </tr>
556         <tr>
557                 <td>PreItem</td>
558                 <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>
559                 <td><dl>
560                         <dt class="ref obj">blog</dt>
561                         <dd><code>BLOG</code> オブジェクト</dd>
562                         <dt class="ref obj">item</dt>
563                         <dd>アイテムデータを持つオブジェクト</dd>
564                 </dl></td>              
565         </tr>
566         <tr>
567                 <td>PostItem</td>
568                 <td>アイテムのパース後、ただしアイテムフッターのパース前</td>
569                 <td><dl>
570                         <dt class="ref obj">blog</dt>
571                         <dd><code>BLOG</code> オブジェクト</dd>
572                         <dt class="ref obj">item</dt>
573                         <dd>アイテムデータを持つオブジェクト</dd>
574                 </dl></td>              
575         </tr>
576         <tr>
577                 <td>PreComment</td>
578                 <td>コメントの表示前</td>
579                 <td><dl>
580                         <dt class="ref">comment</dt>
581                         <dd>コメントデータを持つ連想配列</dd>
582                 </dl></td>              
583         </tr>
584         <tr>
585                 <td>PostComment</td>
586                 <td>コメントの表示後</td>
587                 <td><dl>
588                         <dt class="ref">comment</dt>
589                         <dd>コメントデータを持つ連想配列</dd>
590                 </dl></td>              
591         </tr>
592         <tr>
593                 <td>PreDateHead</td>
594                 <td>日付ヘッダーのパース前</td>
595                 <td><dl>
596                         <dt class="obj ref">blog</dt>
597                         <dd><code>BLOG</code> オブジェクト</dd>
598                         <dt class="ro">timestamp</dt>
599                         <dd>日付ヘッダーのタイムスタンプ</dd>
600                 </dl></td>              
601         </tr>
602         <tr>
603                 <td>PostDateHead</td>
604                 <td>日付ヘッダーのパース後</td>
605                 <td><dl>
606                         <dt class="obj ref">blog</dt>
607                         <dd><code>BLOG</code> オブジェクト</dd>
608                         <dt class="ro">timestamp</dt>
609                         <dd>日付ヘッダーのタイムスタンプ</dd>
610                 </dl></td>              
611         </tr>
612         <tr>
613                 <td>PreDateFoot</td>
614                 <td>日付フッターのパース前</td>
615                 <td><dl>
616                         <dt class="ref obj">blog</dt>
617                         <dd><code>BLOG</code> オブジェクト</dd>
618                         <dt class="ro">timestamp</dt>
619                         <dd>日付フッターのタイムスタンプ</dd>
620                 </dl></td>              
621         </tr>
622         <tr>
623                 <td>PostDateFoot</td>
624                 <td>日付フッターのパース後</td>
625                 <td><dl>
626                         <dt class="ref obj">blog</dt>
627                         <dd><code>BLOG</code> オブジェクト</dd>
628                         <dt class="ro">timestamp</dt>
629                         <dd>日付フッターのタイムスタンプ</dd>
630                 </dl></td>              
631         </tr>   
632         <tr>
633                 <td>LoginSuccess</td>
634                 <td>ログイン成功後</td>
635                 <td><dl>
636                         <dt class="obj ref">member</dt>
637                         <dd><code>MEMBER</code> オブジェクト</dd>
638                 </dl></td>              
639         </tr>
640         <tr>
641                 <td>LoginFailed</td>
642                 <td>ログイン失敗後</td>
643                 <td><dl>
644                         <dt class="ro">username</dt>
645                         <dd>ログイン時に使われたユーザー名</dd>
646                 </dl></td>              
647         </tr>
648         <tr>
649                 <td>Logout</td>
650                 <td>ログアウト後</td>
651                 <td><dl>
652                         <dt class="ro">username</dt>
653                         <dd>ログアウト時のユーザー名</dd>
654                 </dl></td>              
655         </tr>
656         <tr>
657                 <td>PreBlogContent</td>
658                 <td>blogの内容がスキン変数を通して挿入される前</td>
659                 <td><dl>
660                         <dt class="obj ref">blog</dt>
661                         <dd><code>BLOG</code> オブジェクト</dd>
662                         <dt class="ro">type</dt>
663                         <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
664                           'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
665                 </dl></td>              
666         </tr>
667         <tr>
668                 <td>PostBlogContent</td>
669                 <td>blogの内容がスキン変数を通して挿入された後</td>
670                 <td><dl>
671                         <dt class="obj ref">blog</dt>
672                         <dd><code>BLOG</code> オブジェクト</dd>
673                         <dt class="ro">type</dt>
674                         <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
675                   'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
676                 </dl></td>              
677         </tr>
678         <tr>
679                 <td>PreAddComment</td>
680                 <td>コメントがデータベースに追加される前</td>
681                 <td><dl>
682                         <dt class="ref">comment</dt>
683                         <dd>コメントデータ(連想配列)</dd>
684                 </dl></td>              
685         </tr>
686         <tr>
687                 <td>PostAddComment</td>
688                 <td>コメントがデータベースに追加された後</td>
689                 <td><dl>
690                         <dt class="ref">comment</dt>
691                         <dd>コメントデータ(連想配列)</dd>
692                         <dt class="ref">commentid</dt>
693                         <dd>コメントのID</dd>
694                 </dl></td>              
695         </tr>
696         <tr>
697                 <td>PostRegister</td>
698                 <td>新規ユーザーの登録後</td>
699                 <td><dl>
700                         <dt class="obj ref">member</dt>
701                         <dd>新しい<code>MEMBER</code> オブジェクト</dd>
702                 </dl></td>              
703         </tr>
704         <tr>
705                 <td>PostAddItem</td>
706                 <td>アイテムがデータベースに追加された後</td>
707                 <td><dl>
708                         <dt class="ro">itemid</dt>
709                         <dd>データベースに出来た新しい itemid</dd>
710                 </dl></td>              
711         </tr>
712         <tr>
713                 <td>PostUpdateItem</td>
714                 <td>アイテムがデータベースにアップデートされた直後</td>
715                 <td><dl>
716                         <dt class="ro">itemid</dt>
717                         <dd>アイテムのID</dd>
718                 </dl></td>
719         </tr>
720         <tr>
721                 <td>PreAddItem</td>
722                 <td>アイテムがデータベースに追加される直前</td>
723                 <td><dl>
724                         <dt class="ref">title</dt>
725                         <dd>タイトル</dd>
726                         <dt class="ref">body</dt>
727                         <dd>本文</dd>
728                         <dt class="ref">more</dt>
729                         <dd>拡張テキスト</dd>
730                         <dt class="ref obj">blog</dt>
731                         <dd><code>BLOG</code> オブジェクト</dd>
732                         <dt class="ref">authorid</dt>
733                         <dd>執筆者ID</dd>
734                         <dt class="ref">timestamp</dt>
735                         <dd>UNIX タイムスタンプ</dd>
736                         <dt class="ref">closed</dt>
737                         <dd>1 (コメント不可) or 0 (コメント可)</dd>
738                         <dt class="ref">draft</dt>
739                         <dd>1 (ドラフト) or 0 (非ドラフト)</dd>
740                         <dt class="ref">catid</dt>
741                         <dd>カテゴリーID</dd>
742                 </dl></td>              
743         </tr>   
744         <tr>
745                 <td>PreUpdateItem</td>
746                 <td>データベースにあるアイテムが更新される直前</td>
747                 <td><dl>
748                         <dt class="ro">itemid</dt>
749                         <dd>アイテム ID</dd>
750                         <dt class="ref">title</dt>
751                         <dd>タイトル</dd>
752                         <dt class="ref">body</dt>
753                         <dd>本文</dd>
754                         <dt class="ref">more</dt>
755                         <dd>拡張テキスト</dd>
756                         <dt class="ref obj">blog</dt>
757                         <dd><code>BLOG オブジェクト</code> object</dd>
758                         <dt class="ref">closed</dt>
759                         <dd>1 (コメント不可) or 0 (コメント可)</dd>
760                         <dt class="ref">catid</dt>
761                         <dd>カテゴリーID</dd>
762                 </dl></td>              
763         </tr>
764         <tr>
765                 <td>PrepareItemForEdit</td>
766                 <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
767                 <td><dl>
768                         <dt class="ref">item</dt>
769                         <dd>アイテムデータを持つ連想配列</dd>
770                 </dl></td>              
771         </tr>
772         <tr>
773                 <td>PreUpdateComment</td>
774                 <td>コメントが更新され、データベースに保存される直前</td>
775                 <td><dl>
776                         <dt class="ref">body</dt>
777                         <dd>コメント本文</dd>
778                 </dl></td>              
779         </tr>
780         <tr>
781                 <td>PrepareCommentForEdit</td>
782                 <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
783                 <td><dl>
784                         <dt class="ref">comment</dt>
785                         <dd>コメントデータ(連想配列)</dd>
786                 </dl></td>              
787         </tr>
788         <tr>
789                 <td>PrePluginOptionsEdit</td>
790                 <td>
791                         (v2.0b) 'プラグインオプションの編集'フォームが生成される前
792                         <br />(v2.2) パラメータ追加
793                         <br />(v3.2) 各オプションにパラメータ追加
794                 </td>
795                 <td><dl>
796                         <dt class="ro">context</dt>
797                         <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>item</code>, <code>category</code>のいずれか</dd>
798                         <dt class="ref">options</dt>
799                         <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code>, <code>extra</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)<br />
800                         <code>extra</code>フィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 <code>extra</code> に追加する前に <code>pid</code> と <code>getID()</code> を比較し、さらに <code>name</code> をチェックすべきです。</dd>
801                         <dt class="ro">plugid</dt>
802                         <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>
803                         <dt class="ro">contextid</dt>
804                         <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>
805                 </dl></td>              
806         </tr>   
807         <tr>
808                 <td>PrePluginOptionsUpdate</td>
809                 <td>
810                         (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます)
811                 </td>
812                 <td><dl>
813                         <dt class="ro">context</dt>
814                         <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>
815                         <dt class="ro">plugid</dt>
816                         <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)</dd>
817                         <dt class="ro">optionname</dt>
818                         <dd>オプション名</dd>
819                         <dt class="ro">contextid</dt>
820                         <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>
821                         <dt class="ref">value</dt>
822                         <dd>そのオプションの新しい値</dd>
823                 </dl></td>
824         </tr>
825         <tr>
826                 <td>PostPluginOptionsUpdate</td>
827                 <td>
828                         (v2.0b) プラグインオプションの更新後<br />
829                 (v2.2) コンテクストによって異なるパラメータ</td>
830                 <td><dl>
831                         <dt class="ro">context</dt>
832                         <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>
833                         <dt class="ro">plugid</dt>
834                         <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>
835                         <dt class="ro">blogid</dt>
836                         <dd>(v2.2) blog ID (blog コンテクスト)</dd>                       
837                         <dt class="ref obj">blog</dt>
838                         <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>                       
839                         <dt class="ro">memberid</dt>
840                         <dd>(v2.2) member ID (member コンテクスト)</dd>                   
841                         <dt class="ref obj">member</dt>
842                         <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>                   
843                         <dt class="ro">catid</dt>
844                         <dd>(v2.2) category ID (category コンテクスト)</dd>                       
845                         <dt class="ro">itemid</dt>
846                         <dd>(v2.2) item ID (item コンテクスト)</dd>
847                         <dt class="ref obj">member</dt>
848                         <dd>(v2.2) ITEM オブジェクト (item コンテクスト)</dd>
849                 </dl></td>              
850                 
851         </tr>   
852         <tr>
853                 <td>PostAuthentication</td>
854                 <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>
855                 <td><dl>
856                         <dt class="ro">loggedIn</dt>
857                         <dd><code>$member->isLoggedIn()</code>の戻り値</dd>
858                 </dl></td>              
859         </tr>           
860         <tr>
861                 <td>PreAddItemForm</td>
862                 <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>
863                 <td><dl>
864                         <dt class="ref">contents</dt>
865                         <dd>連想配列への参照。そのうちの'title',
866                           'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>
867                         <dt class="ref obj">blog</dt>
868                         <dd><code>BLOG</code> オブジェクトへの参照</dd>
869                 </dl></td>              
870         </tr>           
871         <tr>
872                 <td>AddItemFormExtras</td>
873                 <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>
874                 <td><dl>
875                         <dt class="ref obj">blog</dt>
876                         <dd><code>BLOG</code> オブジェクトへの参照</dd>
877                 </dl></td>              
878         </tr>                   
879         <tr>
880                 <td>EditItemFormExtras</td>
881                 <td>
882                         (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br />
883                         <br />                  
884                         あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h3&gt;プラグイン名&lt;/h3&gt;
885 &lt;p&gt;追加フォームの内容&lt;/p&gt;</code></pre>
886                 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
887                 <td><dl>
888                         <dt class="ref obj">blog</dt>
889                         <dd><code>BLOG</code> オブジェクトへの参照</dd>
890                         <dt class="ro">variables</dt>
891                         <dd>
892                                 (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid',
893                                   'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid',
894                                   'timestamp', 'karmapos', 'karmaneg', 'catid'
895                         </dd>                   
896                         <dt class="ro">itemid</dt>
897                         <dd>アイテム IDへのショートカット</dd>
898                 </dl></td>              
899         </tr>                           
900         <tr>
901                 <td>BlogSettingsFormExtras</td>
902                 <td>(v2.0) blog設定ページにフォームを追加可能<br /><br />                        
903                         あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
904 &lt;form method="post" action="..."&gt;&lt;p&gt;
905 追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
906                         このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
907                 <td><dl>
908                         <dt class="obj ref">blog</dt>
909                         <dd><code>BLOG</code> オブジェクトへの参照</dd>
910                 </dl></td>              
911         </tr>
912         <tr>
913                 <td>PreDeleteItem</td>
914                 <td>(v2.0) アイテムがデータベースから削除される直前</td>
915                 <td><dl>
916                         <dt class="ro">itemid</dt>
917                         <dd>削除されるアイテムID</dd>
918                 </dl></td>              
919         </tr>
920         <tr>
921                 <td>PostDeleteItem</td>
922                 <td>(v2.0) アイテムがデータベースから削除された直後</td>
923                 <td><dl>
924                         <dt class="ro">itemid</dt>
925                         <dd>削除されたアイテムID</dd>
926                 </dl></td>              
927         </tr>
928         <tr>
929                 <td>PreDeleteCategory</td>
930                 <td>(v2.0) カテゴリーがデータベースから削除される直前</td>
931                 <td><dl>
932                         <dt class="ro">catid</dt>
933                         <dd>削除されるカテゴリー ID</dd>
934                 </dl></td>              
935         </tr>
936         <tr>
937                 <td>PostDeleteCategory</td>
938                 <td>(v2.0) カテゴリーがデータベースから削除された直後</td>
939                 <td><dl>
940                         <dt class="ro">catid</dt>
941                         <dd>削除されたカテゴリー ID</dd>
942                 </dl></td>              
943         </tr>   
944         <tr>
945                 <td>PreDeleteBlog</td>
946                 <td>(v2.0) blogがデータベースから削除される直前</td>
947                 <td><dl>
948                         <dt class="ro">blogid</dt>
949                         <dd>削除されるblogID</dd>
950                 </dl></td>              
951         </tr>
952         <tr>
953                 <td>PostDeleteBlog</td>
954                 <td>(v2.0) blogがデータベースから削除された直後</td>
955                 <td><dl>
956                         <dt class="ro">blogid</dt>
957                         <dd>削除されたblogID</dd>
958                 </dl></td>              
959         </tr>   
960         <tr>
961                 <td>PreDeleteMember</td>
962                 <td>(v2.0) メンバーがデータベースから削除される直前</td>
963                 <td><dl>
964                         <dt class="ref obj">member</dt>
965                         <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
966                 </dl></td>              
967         </tr>
968         <tr>
969                 <td>PostDeleteMember</td>
970                 <td>(v2.0) メンバーがデータベースから削除された直後</td>
971                 <td><dl>
972                         <dt class="ref obj">member</dt>
973                         <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
974                 </dl></td>              
975         </tr>   
976         <tr>
977                 <td>PreDeleteTeamMember</td>
978                 <td>(v2.0) メンバーがweblogチームから削除される直前</td>
979                 <td><dl>
980                         <dt class="ref obj">member</dt>
981                         <dd><code>MEMBER</code> オブジェクトへの参照</dd>
982                         <dt class="ro">blogid</dt>
983                         <dd>blogID</dd>
984                 </dl></td>              
985         </tr>
986         <tr>
987                 <td>PostDeleteTeamMember</td>
988                 <td>(v2.0) メンバーがweblogチームから削除された直後</td>
989                 <td><dl>
990                         <dt class="ref obj">member</dt>
991                         <dd><code>MEMBER</code> オブジェクトへの参照</dd>
992                         <dt class="ro">blogid</dt>
993                         <dd>blogID</dd>
994                 </dl></td>              
995         </tr>
996         <tr>
997                 <td>PreDeleteComment</td>
998                 <td>(v2.0) コメントがデータベースから削除される直前</td>
999                 <td><dl>
1000                         <dt class="ro">commentid</dt>
1001                         <dd>削除されるコメントID</dd>
1002                 </dl></td>              
1003         </tr>
1004         <tr>
1005                 <td>PostDeleteComment</td>
1006                 <td>(v2.0) コメントがデータベースから削除された直後</td>
1007                 <td><dl>
1008                         <dt class="ro">commentid</dt>
1009                         <dd>削除されたコメントID</dd>
1010                 </dl></td>              
1011         </tr>           
1012         <tr>
1013                 <td>ActionLogCleared</td>
1014                 <td>(v2.0) アクションログが消去された後</td>
1015                 <td>なし</td>         
1016         </tr>
1017         <tr>
1018                 <td>PreDeleteTemplate</td>
1019                 <td>(v2.0) テンプレートがデータベースから削除される直前</td>
1020                 <td><dl>
1021                         <dt class="ro">templateid</dt>
1022                         <dd>削除されるテンプレートID</dd>
1023                 </dl></td>              
1024         </tr>
1025         <tr>
1026                 <td>PostDeleteTemplate</td>
1027                 <td>(v2.0) テンプレートがデータベースから削除された直後</td>
1028                 <td><dl>
1029                         <dt class="ro">templateid</dt>
1030                         <dd>削除されたテンプレートID</dd>
1031                 </dl></td>              
1032         </tr>           
1033         <tr>
1034                 <td>PreDeleteSkin</td>
1035                 <td>(v2.0) スキンがデータベースから削除される直前</td>
1036                 <td><dl>
1037                         <dt class="ro">skinid</dt>
1038                         <dd>削除されるスキンID</dd>
1039                 </dl></td>              
1040         </tr>
1041         <tr>
1042                 <td>PostDeleteSkin</td>
1043                 <td>(v2.0) スキンがデータベースから削除された直後</td>
1044                 <td><dl>
1045                         <dt class="ro">skinid</dt>
1046                         <dd>削除されたスキンID</dd>
1047                 </dl></td>              
1048         </tr>   
1049         <tr>
1050                 <td>PreDeletePlugin</td>
1051                 <td>(v2.0) プラグインがデータベースから削除される直前</td>
1052                 <td><dl>
1053                         <dt class="ro">plugid</dt>
1054                         <dd>削除されるプラグインID</dd>
1055                 </dl></td>              
1056         </tr>
1057         <tr>
1058                 <td>PostDeletePlugin</td>
1059                 <td>(v2.0) プラグインがデータベースから削除された直後</td>
1060                 <td><dl>
1061                         <dt class="ro">plugid</dt>
1062                         <dd>削除されたプラグインID</dd>
1063                 </dl></td>              
1064         </tr>           
1065         <tr>
1066                 <td>PreDeleteBan</td>
1067                 <td>(v2.0) 禁止IPがデータベースから削除される直前</td>
1068                 <td><dl>
1069                         <dt class="ro">blogid</dt>
1070                         <dd>禁止IPが削除されるblogのID</dd>
1071                         <dt class="ro">iprange</dt>
1072                         <dd>禁止されたIPレンジ</dd>                     
1073                 </dl></td>              
1074         </tr>
1075         <tr>
1076                 <td>PostDeleteBan</td>
1077                 <td>(v2.0) 禁止IPがデータベースから削除された直後</td>
1078                 <td><dl>
1079                         <dt class="ro">blogid</dt>
1080                         <dd>禁止IPが削除されたblogのID</dd>
1081                         <dt class="ro">iprange</dt>
1082                         <dd>禁止されたIPレンジ</dd>                     
1083                 </dl></td>              
1084         </tr>                   
1085         <tr>
1086                 <td>PreAddCategory</td>
1087                 <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>
1088                 <td><dl>
1089                         <dt class="ref obj">blog</dt>
1090                         <dd><code>BLOG</code> オブジェクトの参照</dd>
1091                         <dt class="ref">name</dt>
1092                         <dd>新しいカテゴリー名</dd>                    
1093                         <dt class="ref">description</dt>
1094                         <dd>新しいカテゴリーの説明</dd>
1095                 </dl></td>              
1096         </tr>
1097         <tr>
1098                 <td>PostAddCategory</td>
1099                 <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>
1100                 <td><dl>
1101                         <dt class="ref obj">blog</dt>
1102                         <dd><code>BLOG</code> オブジェクトへの参照</dd>
1103                         <dt class="ro">name</dt>
1104                         <dd>新しいカテゴリー名</dd>                    
1105                         <dt class="ro">description</dt>
1106                         <dd>新しいカテゴリーの説明</dd>
1107                         <dt class="ro">catid</dt>
1108                         <dd>新しいカテゴリー ID</dd>                    
1109                 </dl></td>              
1110         </tr>
1111         <tr>
1112                 <td>PreAddBlog</td>
1113                 <td>(v2.0) 新しいblogが生成される直前</td>
1114                 <td><dl>
1115                         <dt class="ref">name</dt>
1116                         <dd>新しい blog名</dd>
1117                         <dt class="ref">shortname</dt>
1118                         <dd>新しい blogの短縮名</dd>
1119                         <dt class="ref">timeoffset</dt>
1120                         <dd>新しい blogのタイムオフセット</dd>
1121                         <dt class="ref">description</dt>
1122                         <dd>新しい blogの説明</dd>
1123                         <dt class="ref">defaultskin</dt>
1124                         <dd>新しいblogのデフォルトスキンのID</dd>
1125                 </dl></td>              
1126         </tr>
1127         <tr>
1128                 <td>PostAddBlog</td>
1129                 <td>(v2.0) 新しいblogが生成された直後</td>
1130                 <td><dl>
1131                         <dt class="ref obj">blog</dt>
1132                         <dd>新しい<code>BLOG</code> オブジェクト</dd>
1133                 </dl></td>              
1134         </tr>
1135         <tr>
1136                 <td>PreAddPlugin</td>
1137                 <td>(v2.0) プラグインが追加される直前</td>
1138                 <td><dl>
1139                         <dt class="ref">file</dt>
1140                         <dd>新しいプラグインのファイル名</dd>
1141                 </dl></td>              
1142         </tr>
1143         <tr>
1144                 <td>PostAddPlugin</td>
1145                 <td>(v2.0) プラグインが追加された直後</td>
1146                 <td><dl>
1147                         <dt class="ref obj">plugin</dt>
1148                         <dd>新しく追加されたプラグインのオブジェクト</dd>
1149                 </dl></td>              
1150         </tr>
1151         <tr>
1152                 <td>PreAddTeamMember</td>
1153                 <td>(v2.0) メンバーがblogチームに追加される直前</td>
1154                 <td><dl>
1155                         <dt class="ref obj">blog</dt>
1156                         <dd><code>BLOG</code> オブジェクト</dd>
1157                         <dt class="ref obj">member</dt>
1158                         <dd><code>MEMBER</code> オブジェクト</dd>
1159                         <dt class="ref">admin</dt>
1160                         <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
1161                 </dl></td>              
1162         </tr>
1163         <tr>
1164                 <td>PostAddTeamMember</td>
1165                 <td>(v2.0) メンバーがblogチームに追加された直後</td>
1166                 <td><dl>
1167                         <dt class="ref obj">blog</dt>
1168                         <dd><code>BLOG</code> オブジェクト</dd>
1169                         <dt class="ref obj">member</dt>
1170                         <dd><code>MEMBER</code> オブジェクト</dd>
1171                         <dt class="ro">admin</dt>
1172                         <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
1173                 </dl></td>              
1174         </tr>
1175         <tr>
1176                 <td>PreAddTemplate</td>
1177                 <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>
1178                 <td><dl>
1179                         <dt class="ref">name</dt>
1180                         <dd>新しいテンプレート名</dd>
1181                         <dt class="ref">description</dt>
1182                         <dd>新しいテンプレートの説明</dd>
1183                 </dl></td>              
1184         </tr>
1185         <tr>
1186                 <td>PostAddTemplate</td>
1187                 <td>(v2.0) 新しいテンプレートが生成された直後</td>
1188                 <td><dl>
1189                         <dt class="ro">name</dt>
1190                         <dd>新しいテンプレート名</dd>
1191                         <dt class="ro">description</dt>
1192                         <dd>新しいテンプレートの説明</dd>
1193                         <dt class="ro">templateid</dt>
1194                         <dd>新しいテンプレートID</dd>
1195                 </dl></td>              
1196         </tr>   
1197         <tr>
1198                 <td>PreAddSkin</td>
1199                 <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>
1200                 <td><dl>
1201                         <dt class="ref">name</dt>
1202                         <dd>新しいスキン名</dd>
1203                         <dt class="ref">description</dt>
1204                         <dd>新しいスキン名の説明</dd>
1205                         <dt class="ref">type</dt>
1206                         <dd>スキンのコンテントタイプ</dd>
1207                         <dt class="ref">includeMode</dt>
1208                         <dd>新しいスキンのインクルードモード</dd>
1209                         <dt class="ref">includePrefix</dt>
1210                         <dd>新しいスキンのインクルードプレフィックス</dd>
1211                 </dl></td>              
1212         </tr>
1213         <tr>
1214                 <td>PostAddSkin</td>
1215                 <td>(v2.0) 新しいスキンが生成された直後</td>
1216                 <td><dl>
1217                         <dt class="ro">name</dt>
1218                         <dd>新しいスキン名</dd>
1219                         <dt class="ro">description</dt>
1220                         <dd>新しいスキンの説明</dd>
1221                         <dt class="ro">type</dt>
1222                         <dd>スキンのコンテントタイプ</dd>
1223                         <dt class="ro">includeMode</dt>
1224                         <dd>新しいスキンのインクルードモード</dd>
1225                         <dt class="ro">includePrefix</dt>
1226                         <dd>新しいスキンのインクルードプレフィックス</dd>
1227                         <dt class="ro">skinid</dt>
1228                         <dd>新しいスキンID</dd>
1229                 </dl></td>              
1230         </tr>           
1231         <tr>
1232                 <td>PreAddBan</td>
1233                 <td>(v2.0) 新しい禁止IPが追加される直前</td>
1234                 <td><dl>
1235                         <dt class="ref">blogid</dt>
1236                         <dd>blogID</dd>
1237                         <dt class="ref">iprange</dt>
1238                         <dd>禁止されたIPレンジ</dd>
1239                         <dt class="ref">reason</dt>
1240                         <dd>禁止された理由を記述したテキストメッセージ</dd>
1241                 </dl></td>              
1242         </tr>
1243         <tr>
1244                 <td>PostAddBan</td>
1245                 <td>(v2.0) 新しい禁止IPが追加された直後</td>
1246                 <td><dl>
1247                         <dt class="ro">blogid</dt>
1248                         <dd>blogID</dd>
1249                         <dt class="ro">iprange</dt>
1250                         <dd>禁止されたIPレンジ</dd>
1251                         <dt class="ro">reason</dt>
1252                         <dd>禁止された理由を記述したテキストメッセージ</dd>
1253                 </dl></td>              
1254         </tr>           
1255
1256         <tr>
1257                 <td>PreMoveItem</td>
1258                 <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>
1259                 <td><dl>
1260                         <dt class="ref">itemid</dt>
1261                         <dd>アイテムID</dd>
1262                         <dt class="ref">destblogid</dt>
1263                         <dd>移動先のblogID</dd>
1264                         <dt class="ref">destcatid</dt>
1265                         <dd>移動先のカテゴリーID</dd>                  
1266                 </dl></td>              
1267         </tr>
1268         <tr>
1269                 <td>PostMoveItem</td>
1270                 <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>
1271                 <td><dl>
1272                         <dt class="ro">itemid</dt>
1273                         <dd>アイテムID</dd>
1274                         <dt class="ro">destblogid</dt>
1275                         <dd>新しいblogID</dd>
1276                         <dt class="ro">destcatid</dt>
1277                         <dd>新しいカテゴリーID</dd>     
1278                 </dl></td>              
1279         </tr>
1280         <tr>
1281                 <td>PreMoveCategory</td>
1282                 <td>(v2.0) カテゴリーが他のblogに移される直前</td>
1283                 <td><dl>
1284                         <dt class="ref">catid</dt>
1285                         <dd>カテゴリーID</dd>
1286                         <dt class="ref obj">sourceblog</dt>
1287                         <dd>移動元の<code>BLOG</code> オブジェクト</dd>
1288                         <dt class="ref obj">destblog</dt>
1289                         <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       
1290                 </dl></td>              
1291         </tr>
1292         <tr>
1293                 <td>PostMoveCategory</td>
1294                 <td>(v2.0) カテゴリーが他のblogに移された直後</td>
1295                 <td><dl>
1296                         <dt class="ro">catid</dt>
1297                         <dd>カテゴリーID</dd>
1298                         <dt class="ref obj">sourceblog</dt>
1299                         <dd>移動元の<code>BLOG</code> オブジェクト</dd>
1300                         <dt class="ref obj">destblog</dt>
1301                         <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       
1302                 </dl></td>              
1303         </tr>   
1304         <tr>
1305                 <td>MemberSettingsFormExtras</td>
1306                 <td>(v2.0) メンバー設定ページにフォームを追加可能<br /><br />                        
1307                         あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
1308             <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
1309 &lt;form method="post" action="..."&gt;&lt;p&gt;
1310 追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
1311 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
1312                 <td><dl>
1313                         <dt class="ref obj">member</dt>
1314                         <dd><code>MEMBER</code> オブジェクトへの参照</dd>
1315                 </dl></td>              
1316         </tr>
1317         <tr>
1318                 <td>GeneralSettingsFormExtras</td>
1319                 <td>(v2.0) 一般設定ページにフォームを追加可能<br />
1320                   <br />
1321 あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
1322 <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
1323 &lt;form method="post" action="..."&gt;&lt;p&gt;
1324 追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
1325 このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
1326                 <td>なし</td>         
1327         </tr>
1328         <tr>
1329                 <td>AdminPrePageHead</td>
1330                 <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>
1331                 <td><dl>
1332                         <dt class="ref">extrahead</dt>
1333                         <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
1334                         <dt class="ro">action</dt>
1335                         <dd>現在実行されているアクション、またはページタイプ</dd>
1336                 </dl></td>
1337         </tr>
1338         <tr>
1339                 <td>AdminPrePageFoot</td>
1340                 <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>
1341           <td><dl>
1342                         <dt class="ro">action</dt>
1343                         <dd></dd>
1344                 </dl>
1345             現在実行されているアクション、またはページタイプ</td>
1346         </tr>
1347         <tr>
1348                 <td>PreSendContentType</td>
1349                 <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>
1350                 <td><dl>
1351                         <dt class="ref">contentType</dt>
1352                         <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>
1353                         <dt class="ref">charset</dt>
1354                         <dd>キャラクターセット</dd>
1355                         <dt class="ro">pageType</dt>
1356                         <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>
1357                 </dl></td>
1358         </tr>
1359         <tr>
1360                 <td>QuickMenu</td>
1361                 <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>
1362                 <td><dl>
1363                         <dt class="ref">options</dt>
1364                         <dd>配列</dd>
1365                 </dl></td>
1366         </tr>
1367         <tr>
1368                 <td>BookmarkletExtraHead</td>
1369                 <td>(v2.5) ブックマークレット
1370           XHTMLコードのヘッド領域内。</td>
1371                 <td><dl>
1372                         <dt class="ref">extrahead</dt>
1373                         <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
1374                 </dl></td>
1375         </tr>
1376         <tr>
1377                 <td>FormExtra</td>
1378                 <td>(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する <code>ValidateForm</code> イベントに対応します。</td>
1379                 <td><dl>
1380                         <dt class="ro">type</dt>
1381                         <dd>イベントを発生させるフォームタイプ
1382                                 <ul>
1383                                         <li><code>activation</code></li>
1384                                         <li><code>additemform</code> (注:これは管理画面のアイテム追加フォームではない)</li>
1385                                         <li><code>commentform-loggedin</code></li>
1386                                         <li><code>commentform-notloggedin</code></li>
1387                                         <li><code>membermailform-loggedin</code></li>
1388                                         <li><code>membermailform-notloggedin</code></li>
1389                                 </ul>
1390                         </dd>
1391                         <dt class="ro obj">member</dt>
1392                         <dd><code>type</code> が <code>activation</code>のとき、このフィールドは認証メンバーの詳細情報を含みます</dd>
1393                 </dl></td>
1394         </tr>
1395         <tr>
1396                 <td>ValidateForm</td>
1397                 <td>(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。<code>FormExtra</code> と共に使うとフォームにフィールドを追加できます。</td>
1398                 <td><dl>
1399                         <dt class="ro">type</dt>
1400                         <dd>処理されるフォームタイプ
1401                                 <ul>
1402                                         <li><code>membermail</code></li>
1403                                         <li><code>comment</code></li>
1404                                         <li><code>activation</code></li>
1405                                 </ul>
1406                         </dd>
1407                         <dt class="ref">error</dt>
1408                         <dd>フォーム処理をストップするときに、<code>error</code> フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。</dd>
1409                         <dt class="ref">comment</dt>
1410                         <dd>コメントフォームのとき、コメントデータに関する連想配列を含みます。</dd>
1411                         <dt class="ro obj">member</dt>
1412                         <dd>認証フォームのとき、認証中のメンバー情報を含みます。</dd>
1413                 </dl></td>
1414         </tr>
1415 <!--
1416         <tr>
1417                 <td></td>
1418                 <td></td>
1419                 <td><dl>
1420                         <dt></dt>
1421                         <dd></dd>
1422                 </dl></td>
1423         </tr>
1424         <tr>
1425                 <td></td>
1426                 <td></td>
1427                 <td><dl>
1428                         <dt></dt>
1429                         <dd></dd>
1430                 </dl></td>
1431         </tr>
1432         <tr>
1433                 <td></td>
1434                 <td></td>
1435                 <td><dl>
1436                         <dt></dt>
1437                         <dd></dd>
1438                 </dl></td>
1439         </tr>
1440         <tr>
1441                 <td></td>
1442                 <td></td>
1443                 <td><dl>
1444                         <dt></dt>
1445                         <dd></dd>
1446                 </dl></td>
1447         </tr>
1448         <tr>
1449                 <td></td>
1450                 <td></td>
1451                 <td><dl>
1452                         <dt></dt>
1453                         <dd></dd>
1454                 </dl></td>
1455         </tr>
1456         <tr>
1457                 <td></td>
1458                 <td></td>
1459                 <td><dl>
1460                         <dt></dt>
1461                         <dd></dd>
1462                 </dl></td>
1463         </tr>
1464         <tr>
1465                 <td></td>
1466                 <td></td>
1467                 <td><dl>
1468                         <dt></dt>
1469                         <dd></dd>
1470                 </dl></td>
1471         </tr>
1472         <tr>
1473                 <td></td>
1474                 <td></td>
1475                 <td><dl>
1476                         <dt></dt>
1477                         <dd></dd>
1478                 </dl></td>
1479         </tr> -->
1480 </table>
1481
1482
1483
1484 <h1>オプションを保存する<a name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
1485
1486 <p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>
1487
1488 <p>オプションは異なったコンテクストで利用可能です。</p>
1489
1490 <ol>
1491         <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>
1492         <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>
1493         <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>    
1494         <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>
1495         <li><strong>アイテムオプション</strong>:アイテムの追加、およびアイテムの編集ページで編集可能</li>
1496 </ol>
1497
1498 <h2>オプションの種類</h2>
1499
1500 <p>オプションにはいくつかのタイプが提供されています。</p>
1501
1502 <dl>
1503         <dt>text</dt>
1504         <dd>シンプルなテキスト</dd>
1505         <dt>yesno</dt>
1506         <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>
1507         <dt>password</dt>
1508         <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>
1509         <dt>textarea (v2.2)</dt>
1510         <dd>複数行のテキストフィールド</dd>
1511         <dt>select (v2.2)</dt>
1512         <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 </dd>
1513 </dl>
1514
1515 <h2>オプション・メタ</h2>
1516
1517 <p>Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは <code>$typeExtras</code>フィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは<code>$typeExtras</code>のなかで一番最初でなければいけません。</p>
1518
1519 <table><tr>
1520         <th>キー</th>
1521         <th>説明</th>
1522 </tr><tr>
1523         <td><code>datatype</code></td>
1524         <td>Nucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は '<code>numerical</code>' のみ利用できます。 '<code>numerical</code>' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('<code>select</code>' と '<code>text</code>'のオプションタイプで利用できます)</td>
1525 </tr><tr>
1526         <td><code>access</code></td>
1527         <td>'<code>readonly</code>'にセットすることで、オプションを編集不可能にします('<code>text</code>' と '<code>textarea</code>'のオプションタイプで利用できます)<br />
1528         '<code>hidden</code>'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('<code>text</code>'のオプションタイプで利用できます)</td>
1529 </tr></table>
1530
1531 <p>設定例</p>
1532 <pre class="example"><code>// 数値のみを受け付けるテキストオプションを作成
1533 $this->createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');
1534 // 数値のみを受け付けるセレクトオプションを作成
1535 $this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');
1536 // 編集不可能なテキストエリアオプションを作成
1537 $this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');
1538 </code></pre>
1539
1540 <h2>制限</h2>
1541
1542 <ol>
1543         <li>オプション名は最大20文字です。</li>
1544         <li>オプションの説明文は最大255文字です。</li>
1545         <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>
1546         <li>'=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。</li>
1547 </ol>
1548
1549 <h2>メソッド</h2>
1550
1551 <h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
1552
1553 <p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>
1554
1555 <table><tr>
1556         <th>パラメータ</th>
1557         <th>値</th>
1558 </tr><tr>
1559         <td>$name</td>
1560         <td>オプション名</td>
1561 </tr><tr>
1562         <td>$desc</td>
1563         <td>オプション編集画面で表示される説明文</td>
1564 </tr><tr>
1565         <td>$type</td>
1566         <td>オプションタイプ(前出)</td>
1567 </tr><tr>
1568         <td>$defValue</td>
1569         <td>初期値</td>
1570 </tr><tr>
1571         <td>$typeExtras</td>
1572         <td>オプションタイプの追加情報(前出)</td>
1573 </tr></table>
1574
1575 <h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
1576
1577 <p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
1578
1579 <h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
1580
1581 <p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
1582
1583 <h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
1584
1585 <p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
1586
1587 <h3>[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
1588
1589 <p><strong>アイテム</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
1590
1591 <h3>setOption($name, $value)</h3>
1592
1593 <p>すでにデータベースに存在するオプションの値を変更します。</p>
1594
1595 <table><tr>
1596         <th>パラメータ</th>
1597         <th>値</th>
1598 </tr><tr>               
1599         <td>$name</td>
1600         <td>オプション名</td>
1601 </tr><tr>
1602         <td>$value</td>
1603         <td>新しい値</td>
1604 </tr></table>
1605
1606 <h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>
1607
1608 <p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
1609
1610 <h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>
1611
1612 <p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
1613
1614 <h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>
1615
1616 <p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
1617
1618 <h3>[v3.2] setItemOption($itemid, $name, $value)</h3>
1619
1620 <p>アイテムオプションの値を変更します。<code>itemid</code>属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
1621
1622 <h3>getOption($name)</h3>
1623
1624 <p>データベース内のオプションの値を返します。</p>
1625
1626 <table><tr>
1627         <th>パラメータ</th>
1628         <th>値</th>
1629 </tr><tr>               
1630         <td>$name</td>
1631         <td>オプション名</td>
1632 </tr></table>
1633
1634 <h3>[v2.2] getBlogOption($blogid, $name)</h3>
1635
1636 <p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>
1637
1638 <h3>[v2.2] getCategoryOption($catid, $name)</h3>
1639
1640 <p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。<br />
1641 </p>
1642
1643 <h3>[v2.2] getMemberOption($memberid, $name)</h3>
1644
1645 <p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたメンバーを示します(その他のオプション:<code>getOption</code>を参照)。</p>
1646
1647 <h3>[v3.2] getItemOption($itemid, $name)</h3>
1648
1649 <p>アイテムオプションの値を返します。<code>itemid</code>属性は値がリスエストされたアイテムを示します(その他のオプション:<code>getOption</code>を参照)。</p>
1650
1651 <h3>deleteOption($name)</h3>
1652
1653 <p>データベースからオプションを削除します。</p>
1654
1655 <table><tr>
1656         <th>パラメータ</th>
1657         <th>値</th>
1658 </tr><tr>               
1659         <td>$name</td>
1660         <td>オプション名</td>
1661 </tr></table>
1662
1663 <h3>[v2.2] deleteBlogOption($name)</h3>
1664
1665 <p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>
1666
1667 <h3>[v2.2] deleteCategoryOption($name)</h3>
1668
1669 <p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>
1670
1671 <h3>[v2.2] deleteMemberOption($name)</h3>
1672
1673 <p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>
1674
1675 <h3>[v3.2] deleteItemOption($name)</h3>
1676
1677 <p>アイテムオプションを削除します(<code>deleteOption</code>を参照)。</p>
1678
1679 <h3>[v2.2] getAllBlogOptions($name)</h3>
1680
1681 <p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>
1682
1683 <h3>[v2.2] getAllCategoryOptions($name)</h3>
1684
1685 <p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>
1686
1687 <h3>[v2.2] getAllMemberOptions($name)</h3>
1688
1689 <p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>
1690
1691 <h3>[v3.2] getAllItemOptions($name)</h3>
1692
1693 <p>与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。</p>
1694
1695 <h3>[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')</h3>
1696
1697 <p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。</p>
1698
1699 <table><tr>
1700         <th>パラメータ</th>
1701         <th>値</th>
1702 </tr><tr>
1703         <td>$name</td>
1704         <td>オプション名</td>
1705 </tr><tr>
1706         <td>$amount</td>
1707         <td>必要なオプション数</td>
1708 </tr><tr>
1709         <td>$sort</td>
1710         <td>昇順 ('asc') か降順 ('desc') で並べ替え</td>
1711 </tr></table>
1712
1713 <h3>[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')</h3>
1714
1715 <p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
1716
1717 <h3>[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')</h3>
1718
1719 <p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
1720
1721
1722 <h3>[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')</h3>
1723
1724 <p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
1725
1726
1727 <div class="note">
1728 <b>注:</b> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。</div>
1729
1730 <h1>データベース・テーブル<a name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
1731
1732 <h2>Nucleusテーブルへのアクセス</h2>
1733
1734 <p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>
1735
1736 <ol>
1737         <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>
1738         <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>
1739 </ol>
1740
1741 <p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>
1742
1743 <pre class="example"><code>&lt;?
1744
1745 // プラグインがNucleusバージョン2.0以下と互換性を持つために必要
1746 if (!function_exists('sql_table'))
1747 {
1748         function sql_table($name) {
1749                 return 'nucleus_' . $name;
1750         }
1751 }
1752
1753 class NP_HelloWorld extends NucleusPlugin {
1754 ...
1755 }
1756
1757 ?&gt;</code></pre>
1758
1759 <h2>独自テーブル</h2>
1760
1761 <p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>
1762
1763 <p>いくつかの注意点</p>
1764 <ul>
1765         <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を
1766         <code>sql_table('plug_plugname')</code> で生成してください。
1767         </li>
1768         <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>
1769         <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code>  を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- &gt;db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます。</li>
1770         <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>
1771 </ul>
1772
1773 <h1>プラグイン管理エリア<a name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
1774
1775 <p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>
1776
1777 <h2>基本</h2>
1778
1779 <p>管理エリアを提供するには、次のステップが必要です。</p>
1780
1781 <ol>
1782   <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>
1783   <li>
1784         そのディレクトリで、次のような<strong>index.php</strong>を用意します。
1785         <pre><code>&lt;?php
1786
1787         // if your 'plugin' directory is not in the default location,
1788         // edit this variable to point to your site directory
1789         // (where config.php is)
1790         $strRel = '../../../';
1791
1792         include($strRel . 'config.php');
1793         if (!$member->isLoggedIn())
1794                 doError('You\'re not logged in.');
1795
1796         include($DIR_LIBS . 'PLUGINADMIN.php');
1797
1798         // create the admin area page
1799         $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');
1800         $oPluginAdmin->start();
1801
1802         echo '&lt;h2&gt;プラグイン名&lt;/h2&gt;';
1803
1804         echo '&lt;p&gt;<strong>ページ内容</strong>&lt;p&gt;';
1805
1806         $oPluginAdmin->end();
1807
1808 ?&gt;</code></pre>
1809   </li>
1810   <li>
1811         プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。
1812     <pre><code>function event_QuickMenu(&amp;$data) {
1813                 array_push(
1814                         $data['options'],
1815                         array(
1816                                 'title' => '<strong>プラグイン名</strong>',
1817                                 'url' => $this->getAdminURL(),
1818                                 'tooltip' => '<strong>ツールチップテキスト</strong>'
1819                         )
1820                 );
1821         }</code></pre>
1822   </li>
1823   <li>
1824         プラグイン側に次の関数を記述します。
1825     <pre><code>function hasAdminArea()
1826 {
1827         return 1;
1828 }</code></pre>
1829   </li>
1830 </ol>
1831
1832 <h2>考慮すること</h2>
1833
1834 <ul>
1835  <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>
1836  <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>
1837  <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>
1838 </ul>
1839
1840 <h2>PluginAdmin クラス</h2>
1841
1842 <p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin->plugin</code> でプラグインのインスタンスにアクセスできます。</p>
1843
1844 <h1>プラグイン用ヘルプページ <a name="help" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
1845
1846 <p>Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。</p>
1847
1848 <p>ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。</p>
1849
1850 <h2>基本</h2>
1851 <p>ヘルプページを提供するために、次のステップが必要です。</p>
1852 <ol>
1853 <li>プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。<a href="#admin">管理エリア</a>を作るときと同様です。</li>
1854 <li>そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。
1855 <pre><code>&lt;h3&gt;プラグインの概要&lt;/h3&gt;
1856
1857 &lt;p&gt;このプラグインはヘルプページがいかに機能するかを示すためだけのものです&lt;/p&gt;
1858
1859 &lt;h3&gt;インストール&lt;/h3&gt;
1860
1861 &lt;p&gt;これを読めてるならインストールは正しく出来てます :-)&lt;/p&gt;
1862
1863 &lt;h3&gt;スキン変数&lt;/h3&gt;
1864
1865 &lt;p&gt;このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。
1866
1867 &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1%&gt;&lt;/b&gt;: なにかをする&lt;/li&gt;
1868 &lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1(foobar)%&gt;&lt;/b&gt;: 別のなにかをする&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
1869
1870 &lt;h3&gt;サポートとバグ報告&lt;/h3&gt;
1871
1872 &lt;p&gt;さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。
1873 &lt;a href="http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;"&gt;
1874 http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;&lt;/a&gt;&lt;/p&gt;
1875
1876 &lt;h3&gt;バージョン履歴&lt;/h3&gt;
1877
1878 &lt;ul&gt;&lt;li&gt;Version 0.1: 最初のテストケースバージョン&lt;/li&gt;
1879 &lt;li&gt;Version 0.0: その前のバージョン ;-)&lt;/li&gt;&lt;/ul&gt;</code></pre>
1880 </li>
1881 <li>supportsFeature('HelpPage') で0より大きい数字を返すように設定します。
1882 <pre><code>function supportsFeature($what) {
1883         switch($what) {
1884         case 'HelpPage':
1885                 return 1;
1886           default:
1887                 return 0;
1888         }
1889   }</code></pre>
1890 </li>
1891 </ol>
1892
1893 <h1>プラグイン依存チェック <a name="dependency" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
1894
1895 <p>v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。</p>
1896
1897 <h2>この機能を利用するプラグインの書き方</h2>
1898
1899 <p>現実世界での例からはじめましょう。</p>
1900
1901 <p>NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。</p>
1902
1903 <p>このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。プラグインがインストールされる際に、Nucleusコアは <code>getPluginDep()</code> というファンクションを呼び出します。このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。</p>
1904
1905 <p>必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。</p>
1906
1907 <pre><code>function getPluginDep() {
1908          return array('NP_BlogWithOffset');
1909 }</code></pre>
1910
1911 <p>このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。</p>
1912
1913 </body>
1914 </html>