OSDN Git Service

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