getMinNucleusVersion
を適切に設定するのを忘れないでください。このドキュメントはNucleusプラグインの作り方についての解説です。
NucleusPlugin
クラスの概要<%plugin(...)%>
スキン変数<%plugin(...)%>
テンプレート変数action.php
を使ったアクションNucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。
プラグインの利点は以下のとおりです。
すべてのプラグインファイルは config.php
に記述されたディレクトリに置く必要があります。一般的に、それは /your/path/nucleus/plugins/
になるでしょう。プラグインファイル名は NP_name.php
という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。
Np_
や np_
ではなく、NP_
で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称はすべて小文字にします。
では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された NucleusPlugin
クラスを継承したPHPクラスです。以下はHelloWorld
プラグインの例です。
<?php
class NP_HelloWorld extends NucleusPlugin {
// プラグインの名前
function getName() {
return 'Hello World';
}
// プラグインの作者
function getAuthor() {
return 'Wouter Demuynck';
}
// プラグインのサイトURL
// mailto:foo@bar.com の形式も可
function getURL()
{
return '../../index.html';
}
// プラグインのバージョン
function getVersion() {
return '1.0';
}
// インストール済みのプラグインリストに表示される説明文
function getDescription() {
return 'Just a sample plugin.';
}
function doSkinVar($skinType) {
echo 'Hello World!';
}
}
?>
NP_HelloWorld.php
と名づけて保存し、プラグインディレクトリに置きます。最後の ?>
の後や、最初の <?
の前にスペースがないことを確認しましょう。ところでNP は "Nucleus Plugin" って意味ですよ :-)
<%plugin(HelloWorld)%>
注意:カッコ内の名称 (HelloWorld) は大文字小文字を識別します!ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。
すべてのプラグインは、NucleusPlugin
というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。
下記は NucleusPlugin
が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、nucleus/libs/PLUGIN.php
にあります。
メソッド名 | 説明 |
---|---|
getName() |
プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では Undefined を返すため、必ず再定義されないといけません。 |
getAuthor() |
プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では Undefined を返すため、必ず再定義されないといけません。 |
getURL() |
プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では Undefined を返すため、必ず再定義されないといけません。 |
getDescription() |
プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では Undefined を返します。 |
getVersion() |
プラグインの現在のバージョンを返します。デフォルトは 0.0 を返します。 |
getMinNucleusVersion() |
(v2.0b) 最低必要なNucleusのバージョンを返します。デフォルトは 155 (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。 |
getMinNucleusPatchLevel() |
(v3.1) Returns the minimum required Nucleus patch level that needs to be present when running the minimal required Nucleus version (getMinNucleusVersion ). By default, this returns 0 . This function is generally used when new plugin features are available only as patches to the latest released Nucleus version. |
init() |
プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、plugid 属性がセットされます。デフォルトではこのメソッドは何もしません。 |
doSkinVar($skinType) |
<%plugin(...)%> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。$skinType パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(item ,
archive , ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも可能です。doSkinVar メソッドの実装に関する詳細情報はこちら。デフォルトではこのメソッドはなにも出力しません。 |
doTemplateVar(&$item) |
基本的に doSkinVar と同じですが、今度はテンプレート内(item
header/body/footer と dateheader/footer )での<%plugin(...)%> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
doSkinVar メソッドに処理を渡します。doTemplateVar メソッドの実装に関する詳細情報はこちら |
doTemplateCommentsVar(&$item, &$comment) |
(v2.0b) 基本的に doSkinVar と同じですが、今度はテンプレート内(コメント部分)での<%plugin(...)%> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
doSkinVar メソッドに処理を渡します。doTemplateCommentsVar
メソッドの実装に関する詳細情報はこちら |
doAction($type) |
プラグインがユーザーインタラクションを求めたとき、 action.php を介してこのメソッドがそれを与えます。.
これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの
doAction メソッドを呼び出せます。$type はオプションのメッセージタイプに該当します。doAction メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると'No
Such Action' という文字列を返します。doAction に関する詳細情報はこちら |
install() |
このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。 |
unInstall() |
プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。 |
getEventList() |
プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、AddItem イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは event_AddItem($params) になります。 $params パラメータは、例えば AddItem の itemid のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。イベントに関する詳細情報
はこちら |
getTableList() |
このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。 |
hasAdminArea() |
プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは 0 を返します。 |
実装可能なメソッドの次は、NucleusPlugin
クラスが提供する、再実装すべきでない幾つかの特殊メソッドです。これらはプラグイン内で、$this->functionName()
シンタックスを利用して呼び出します。
メソッド名 | 説明 |
---|---|
createOption(...)
createBlogOption(...) (v2.2)
createCategoryOption(...) (v2.2)
createMemberOption(...) (v2.2)
createItemOption(...) (v3.1+CVS)
|
新しいオプションを生成します。 |
deleteOption(...)
deleteBlogOption(...) (v2.2)
deleteCategoryOption(...) (v2.2)
deleteMemberOption(...) (v2.2)
deleteItemOption(...) (v3.1+CVS)
|
オプションを削除します。 |
setOption(...)
setBlogOption(...) (v2.2)
setCategoryOption(...) (v2.2)
setMemberOption(...) (v2.2)
setItemOption(...) (v3.1+CVS)
|
オプションに値をセットします。 |
getOption(...)
getBlogOption(...) (v2.2)
getCategoryOption(...) (v2.2)
getMemberOption(...) (v2.2)
getItemOption(...) (v3.1+CVS)
|
オプションの値を取得します。 |
getAllBlogOptions(...) (v2.2)
getAllCategoryOptions(...) (v2.2)
getAllMemberOptions(...) (v2.2)
getAllItemOptions(...) (v3.1+CVS)
|
与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。 |
getBlogOptionTop(...) (v3.1+CVS)
getMemberOptionTop(...) (v3.1+CVS)
getCategoryOptionTop(...) (v3.1+CVS)
getItemOptionTop(...) (v3.1+CVS)
|
For a given option, returns the top of all values |
getID() |
このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。 |
getAdminURL() |
プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。 |
getDirectory() |
プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は".../nucleus/plugins/plugname/ "のようになります。 |
getShortName() |
"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は getAdminURL と getDirectory で使用されます。 |
独自のスキン変数を生成し、<%plugin(PlugName,parameters)%>
または <%PlugName(parameters)%>
で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。
スキン変数を扱うには、doSkinVar
メソッドを実装する必要があります。いくつかの例を以下に示します。
function doSkinVar($skinType)
function doSkinVar($skinType, $param1, $param2)
function doSkinVar($skinType, $skinVar, $param1, $param2)
function doSkinVar($skinType, $skinVar, $param1 = 'default value')
$skinType
パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',
'search', 'imagepopup', 'template'のうちの一つを取ります$skinVar
は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<%plugin(PlugName,VarType)%>
)。doSkinVar()
(パラメータ無し)を使い、PHPファンクションのfunc_get_args()
を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。$currentSkinName
を使ってスキンの名前を取得できます。テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。
doTemplateVar
メソッドは &$item
パラメータを取ります。doTemplateCommentsVar
メソッドは &$item
と &$comment
パラメータを取ります。テンプレート変数はスキン変数と同じ要領で呼ばれます(<%plugin(PlugName,parameters)%>
または <%PlugName(parameters)%>
)。
デフォルトでは、全てのテンプレート変数は'template
'をskintype
パラメータとして、doSkinVar
メソッドに渡ります。
独自の実装を提供したい場合は、doTemplateVar
メソッドや doTemplateCommentsVar
メソッドを再定義する必要があります。skintype
パラメータが無くなる以外はdoSkinVarと同様に働きます。
function doTemplateVar(&$item)
function doTemplateVar(&$item, $param1, $param2)
function doTemplateVar(&$item, $type, $param1, $param2)
function doTemplateVar(&$item, $type, $param1 = 'default value')
function doTemplateCommentsVar(&$item, &$comment)
function doTemplateCommentsVar(&$item, &$comment, $param1, $param2)
function doTemplateCommentsVar(&$item, &$comment, $type, $param1, $param2)
function doTemplateCommentsVar(&$item, &$comment, $type, $param1 = 'default value')
$currentSkinName
を使ってテンプレートの名前を取得できます。プラグインは action.php
を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは
action
('plugin'と指定)、name
(プラグイン名)、type
(リクエストされたアクションの種類)です。
これらのアクションを有効にするために、doAction($actionType)
メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは
requestVar('name')
で取得できます(requestVar
はPHPが付加する magic_quotes_gpc に配慮しています)。
doAction
メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。
Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。
下記は PreAddComment
イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。
class NP_Acronyms extends NucleusPlugin {
...
function getEventList() { return array('PreAddComment'); }
...
function event_PreAddComment(&$data) {
// 頭字語 HTML を置き換え
$data['comment']['body'] =
strreplace('HTML',
'<acronym title="HyperText Markup Language">HTML</acronym>',
$data['comment']['body']);
}
}
このプラグインはコメント中の'HTML'というテキストを'<acronym title="HyperText
Markup Language">HTML</acronym>
'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。
イベント登録に必要なステップは以下になります。
getEventList
メソッドから返る配列にイベント名を追加します。event_EventName($data)
という形でメソッドを生成し、この中でイベントを処理します。複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。
event_EventName
メソッドはひとつだけ $data
パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は参照形式で渡されるため、これらに加えた変更は記憶されます。
以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。
パラメータとして渡されるオブジェクトはobject.として示されます。ほとんどのオブジェクトは参照渡しで、object by refのように示されます。
名前 | いつ | パラメータ |
---|---|---|
PreSkinParse | スキンのパースの直前 |
|
PostSkinParse | スキンのパースの直後 |
|
PreItem | アイテムのパース前、ただしアイテムヘッダーのパース後 |
|
PostItem | アイテムのパース後、ただしアイテムフッターのパース前 |
|
PreComment | コメントの表示前 |
|
PostComment | コメントの表示後 |
|
PreDateHead | 日付ヘッダーのパース前 |
|
PostDateHead | 日付ヘッダーのパース後 |
|
PreDateFoot | 日付フッターのパース前 |
|
PostDateFoot | 日付フッターのパース後 |
|
LoginSuccess | ログイン成功後 |
|
LoginFailed | ログイン失敗後 |
|
Logout | ログアウト後 |
|
PreBlogContent | blogの内容がスキン変数を通して挿入される前 |
|
PostBlogContent | blogの内容がスキン変数を通して挿入された後 |
|
PreAddComment | コメントがデータベースに追加される前 |
|
PostAddComment | コメントがデータベースに追加された後 |
|
PostRegister | 新規ユーザーの登録後 |
|
PostAddItem | アイテムがデータベースに追加された後 |
|
PreAddItem | アイテムがデータベースに追加される直前 |
|
PreUpdateItem | データベースにあるアイテムが更新される直前 |
|
PrepareItemForEdit | アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前 |
|
PreUpdateComment | コメントが更新され、データベースに保存される直前 |
|
PrepareCommentForEdit | コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前 |
|
PrePluginOptionsEdit |
(v2.0b) 'プラグインオプションの編集'フォームが生成される前 (v2.2) パラメータ追加 (3.1+CVS) extra parameter for every option |
|
PrePluginOptionsUpdate | (v3.1+CVS) Before the options for a plugin have been updated. (using this event you can validate/change the new value for an option) |
|
PostPluginOptionsUpdate |
(v2.0b) プラグインオプションの更新後 (v2.2) コンテクストによって異なるパラメータ |
|
PostAuthentication | (v2.0b) ログイン処理の完了後。ページリクエストごとに発生 |
|
PreAddItemForm | (v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前 |
|
AddItemFormExtras | (v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。template ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。 |
|
EditItemFormExtras |
(v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。template ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。
このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url )。 |
|
BlogSettingsFormExtras | (v2.0) blog設定ページにフォームを追加可能 あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。
このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url )。 |
|
PreDeleteItem | (v2.0) アイテムがデータベースから削除される直前 |
|
PostDeleteItem | (v2.0) アイテムがデータベースから削除された直後 |
|
PreDeleteCategory | (v2.0) カテゴリーがデータベースから削除される直前 |
|
PostDeleteCategory | (v2.0) カテゴリーがデータベースから削除された直後 |
|
PreDeleteBlog | (v2.0) blogがデータベースから削除される直前 |
|
PostDeleteBlog | (v2.0) blogがデータベースから削除された直後 |
|
PreDeleteMember | (v2.0) メンバーがデータベースから削除される直前 |
|
PostDeleteMember | (v2.0) メンバーがデータベースから削除された直後 |
|
PreDeleteTeamMember | (v2.0) メンバーがweblogチームから削除される直前 |
|
PostDeleteTeamMember | (v2.0) メンバーがweblogチームから削除された直後 |
|
PreDeleteComment | (v2.0) コメントがデータベースから削除される直前 |
|
PostDeleteComment | (v2.0) コメントがデータベースから削除された直後 |
|
ActionLogCleared | (v2.0) アクションログが消去された後 | なし |
PreDeleteTemplate | (v2.0) テンプレートがデータベースから削除される直前 |
|
PostDeleteTemplate | (v2.0) テンプレートがデータベースから削除された直後 |
|
PreDeleteSkin | (v2.0) スキンがデータベースから削除される直前 |
|
PostDeleteSkin | (v2.0) スキンがデータベースから削除された直後 |
|
PreDeletePlugin | (v2.0) プラグインがデータベースから削除される直前 |
|
PostDeletePlugin | (v2.0) プラグインがデータベースから削除された直後 |
|
PreDeleteBan | (v2.0) 禁止IPがデータベースから削除される直前 |
|
PostDeleteBan | (v2.0) 禁止IPがデータベースから削除された直後 |
|
PreAddCategory | (v2.0) 新しいカテゴリーがデータベースに生成される直前 |
|
PostAddCategory | (v2.0) 新しいカテゴリーがデータベースに生成された直後 |
|
PreAddBlog | (v2.0) 新しいblogが生成される直前 |
|
PostAddBlog | (v2.0) 新しいblogが生成された直後 |
|
PreAddPlugin | (v2.0) プラグインが追加される直前 |
|
PostAddPlugin | (v2.0) プラグインが追加された直後 |
|
PreAddTeamMember | (v2.0) メンバーがblogチームに追加される直前 |
|
PostAddTeamMember | (v2.0) メンバーがblogチームに追加された直後 |
|
PreAddTemplate | (v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる) |
|
PostAddTemplate | (v2.0) 新しいテンプレートが生成された直後 |
|
PreAddSkin | (v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる) |
|
PostAddSkin | (v2.0) 新しいスキンが生成された直後 |
|
PreAddBan | (v2.0) 新しい禁止IPが追加される直前 |
|
PostAddBan | (v2.0) 新しい禁止IPが追加された直後 |
|
PreMoveItem | (v2.0) アイテムが他のblog/カテゴリーに移される直前 |
|
PostMoveItem | (v2.0) アイテムが他のblog/カテゴリーに移された直後 |
|
PreMoveCategory | (v2.0) カテゴリーが他のblogに移される直前 |
|
PostMoveCategory | (v2.0) カテゴリーが他のblogに移された直後 |
|
MemberSettingsFormExtras | (v2.0) メンバー設定ページにフォームを追加可能 あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。
このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url )。 |
|
GeneralSettingsFormExtras | (v2.0) 一般設定ページにフォームを追加可能 あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。
このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url )。 |
なし |
AdminPrePageHead | (v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。 |
|
AdminPrePageFoot | (v2.5) 管理画面で、ページフッターを出力する直前。 |
|
PreSendContentType | (v2.5) HTTPヘッダーにコンテントタイプがセットされる直前 |
|
QuickMenu | (v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例がプラグイン管理エリアを作るのセクションにあります。 |
|
BookmarkletExtraHead | (v2.5) ブックマークレット XHTMLコードのヘッド領域内。 |
|
プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。
オプションは異なったコンテクストで利用可能です。
オプションにはいくつかのタイプが提供されています。
As of Nucleus 3.1+CVS, some option types can be limited to only accept certain values using option-metadata. This metadata is stored in the $typeExtras
-field, and is a semicolon-seperated list of values. Note: In a select-option, the select list must be the first value in $typeExtras.
key | explanation |
---|---|
numeric | If set to 'true ', Nucleus will only accept numerical values for this option (available for optiontypes: 'select ' and 'text ') |
access | If set to 'readonly ', the option will not be editable (available for optiontypes: 'text ' and 'textarea ')If set to ' hidden ', the option will be completely hidden for the end-user (available for optiontypes: 'text ') |
some examples:
// following code creates a text-option that only accepts numerical values
$this->createBlogOption('FooBar', 'foobar', 'text', '0', 'numerical=true');
// following code creates a select-option that only accepts numerical values
$this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;numerical=true');
// following code creates a textarea-option that is readonly
$this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');
グローバルなコンテクストで新しいオプションを生成します。
パラメータ | 値 |
---|---|
$name | オプション名 |
$desc | オプション編集画面で表示される説明文 |
$type | オプションタイプ(前出) |
$defValue | 初期値 |
$typeExtras | オプションタイプの追加情報(前出) |
blogのコンテクストで新しいオプションを生成します(createOption
を参照)。
カテゴリーのコンテクストで新しいオプションを生成します(createOption
を参照)。
メンバーのコンテクストで新しいオプションを生成します(createOption
を参照)。
Creates an option in the item
context (see createOption
)
すでにデータベースに存在するオプションの値を変更します。
パラメータ | 値 |
---|---|
$name | オプション名 |
$value | 新しい値 |
blogオプションの値を変更します。blogid
属性はどのblogでそのオプションが有効かを示します(その他のオプション:setOption
を参照)。
カテゴリーオプションの値を変更します。catid
属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:setOption
を参照)。
メンバーオプションの値を変更します。memberid
属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:setOption
を参照)。
Changes the value for an item option. The itemid
attribute indicates for which item the option is valid. (other options: see setOption
)
データベース内のオプションの値を返します。
パラメータ | 値 |
---|---|
$name | オプション名 |
blogオプションの値を返します。blogid
属性は値がリスエストされたblogを示します(その他のオプション:getOption
を参照)。
カテゴリーオプションの値を返します。catid
属性は値がリスエストされたカテゴリーを示します(その他のオプション:getOption
を参照)。
メンバーオプションの値を返します。memberid
属性は値がリスエストされたカテゴリーを示します(その他のオプション:getOption
を参照)。
Returns the value for an item option. itemid
indicates for which item a value is requested (other parameters: see getOption
)
データベースからオプションを削除します。
パラメータ | 値 |
---|---|
$name | オプション名 |
blogオプションを削除します(deleteOption
を参照)。
カテゴリーオプションを削除します(deleteOption
を参照)。
メンバーオプションを削除します(deleteOption
を参照)。
Deletes an item option (see deleteOption
)
与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。
与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。
与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。
Returns all values for a given item option. The result is an associative array with a value for each existing itemid
Returns the top of the values for a given option. The result is an array where every element is an array with a value ('value') for each blogid ('id')
parameter | value |
---|---|
$name | Option name |
$amount | The amount of options you want |
$sort | Sort ascending ('asc') or descending ('desc') |
Returns the top of the values for a given option. The result is an array where every element is an array with a value ('value') for each memberid ('id') (parameters: see getBlogOptionTop
)
Returns the top of the values for a given option. The result is an array where every element is an array with a value ('value') for each categoryid ('id') (parameters: see getBlogOptionTop
)
Returns the top of the values for a given option. The result is an array where every element is an array with a value ('value') for each itemid ('id') (parameters: see getBlogOptionTop
)
init()
メソッド内に置きます。v2.0まで、Nucleusテーブルへのアクセスは単にnucleus_
と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。
nucleus_item
などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために sql_table('item')
というグローバルファンクションを利用します。supportsFeature('SqlTablePrefix')
が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。v2.0までのNucleusではグローバルファンクション sql_table
は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。
<?php
// プラグインがNucleusバージョン2.0以下と互換性を持つために必要
if (!function_exists('sql_table'))
{
function sql_table($name) {
return 'nucleus_' . $name;
}
}
class NP_HelloWorld extends NucleusPlugin {
...
}
?>
もしプラグイン独自のテーブルが必要なら、install
メソッドの中で独自テーブルを生成し、unInstall
メソッドの中でそれを削除するようにします。
いくつかの注意点
nucleus_plug_plugname
のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を
sql_table('plug_plugname')
で生成してください。 mysql_query()
を使ってSQL命令を実行できます。sql_connect()
を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。$this- >db
のリンクIDを保持でき、各クエリにそれを渡すことができます(訳者注:理解不足。別接続のリンクを同時に持てるということ?)。getTableList()
を再定義してください。Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。
管理エリアを提供するには、次のステップが必要です。
NP_PluginName
なら、'pluginname'です。ディレクトリ名はすべて小文字で!<?php
// if your 'plugin' directory is not in the default location,
// edit this variable to point to your site directory
// (where config.php is)
$strRel = '../../../';
include($strRel . 'config.php');
if (!$member->isLoggedIn())
doError('You\'re not logged in.');
include($DIR_LIBS . 'PLUGINADMIN.php');
// create the admin area page
$oPluginAdmin = new PluginAdmin('PluginName');
$oPluginAdmin->start();
echo '<h2>プラグイン名</h2>';
echo '<p>ページ内容<p>';
$oPluginAdmin->end();
?>
function event_QuickMenu(&$data) {
array_push(
$data['options'],
array(
'title' => 'プラグイン名',
'url' => $this->getAdminURL(),
'tooltip' => 'ツールチップテキスト'
)
);
}
function hasAdminArea()
{
return 1;
}
プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel
変数は手動で書き換える必要があります。PluginAdmin
クラスは助けになります。これを一度生成すれば、$oPluginAdmin->plugin
でプラグインのインスタンスにアクセスできます。
As of Nucleus v3.1+CVS plugins can provide a helppage with an overview of the plugins' functionality, the available skinvars and templatevars, where to get more info,...
To provide a helppage, you'll need take these steps:
<h3>Plugin overview</h3>
<p>The only purpose of this plugin is to show how the plugin helppages work</p>
<h3>Installation</h3>
<p>If you can read this you correctly installed the plugin :-)</p>
<h3>SkinVars</h3>
<p>Because this plugin is only a testcase it doesn't has any skinvars/templatevars but suppose it would have:
<ul><li><b><%HelpPageTestCase1%></b>: does something</li>
<li><b><%HelpPageTestCase1(foobar)%></b>: does something else</li></ul></p>
<h3>Support and Bug reports</h3>
<p>For additional support and/or bug reports please use this forum thread:
<a href="http://forum.nucleuscms.org/viewtopic.php?t=<TOPIC_ID_GOES_HERE>">
http://forum.nucleuscms.org/viewtopic.php?t=<TOPIC_ID_GOES_HERE></a></p>
<h3>Version History</h3>
<p><ul><li>Version 0.1: initial testcaseversion</li>
<li>Version 0.0: pre-initial version ;-)</li></ul></p>
function supportsFeature($what) {
switch($what) {
case 'HelpPage':
return 1;
default:
return 0;
}
}
Starting from 3.1+ CVS, a new plugin interface is added to allow one to declare any dependency on other plugin(s). This is useful for any plugin that require another plugin to function. It is particularly useful for a plugin to detect any broken dependency that prevent a plugin to function properly.
Let try a real world example.
NP_PageLinkList depends on NP_BlogWithOffset to function, so we want to make sure if a user install NP_PageLinkList whithout first install NP_BlogWithOffset. With this API, Nucleus offers a way for a plugin to detect any missing dependency before it is installed.
In this case, we want to code into NP_PageLinkList to mark that it requires NP_BlogWithOffset. When the plugin is installed, the core calls a function in the plugin called getPluginDep(). This function returns a list of plugin it requires, and the core will check against all installed plugins and failed the installation if a dependency is missing.
All we have to do is added this function to NP_PageLinkList:
function getPluginDep() { return array('NP_BlogWithOffset'); }