KnowledgeTreeプラグイン作成1
KnowledgeTreeを触り始めた。バージョン間の差分が取れればいいなぁと思ってプラグインを書いてみる事にした。
その後気づいたけど、同様の機能は有償版には含まれているらしいね。ただ、KnowledgeTreeの日本語の情報って少ないし、プラグインの情報なんてもっと少ないので、せっかくだし勉強がてらプラグインを書いてその情報を載っけていこうかと。これからプラグイン書こうという人の参考になればいいかな。
今回作るのは「Action」というもの。プラグインには色んな種類があるけど(英語だけどこの辺を参考に)、Actionは文書やフォルダに対する何らかの処理を行うもの。文書を選択すると右の方のメニューで「Archive」とか「Copy」とかが表示されているけど、それらがAction。
Actionの作り方は同じく英語ページのここに載ってるんだけど、正直言ってこれだけじゃよく分からなくて、既存のプラグインのソースを見ながら見よう見まねで作り始めた。
とりあえず2つクラスを作る必要がある必要らしい。
- KTPluginクラスの子クラス
- KTDocumentActionクラスの子クラス
1つずつ説明。
<?php
require_once(KT_LIB_DIR . '/plugins/plugin.inc.php');
require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php');
class DocumentDiffPlugin extends KTPlugin {
var $sNamespace = 'kz.documentdiff.plugin';
function DocumentDiffPlugin($sFilename = null) {
$res = parent::KTPlugin($sFilename);
$this->sFriendlyName = _kt('Document Diff Plugin');
return $res;
}
function setup() {
$this->registerAction('documentaction', 'DocumentDiffAction', 'kz.documentdiff.plugin.document.diff', 'DocumentDiffAction.php');
}
}
$oPluginRegistry =& KTPluginRegistry::getSingleton();
$oPluginRegistry->registerPlugin('DocumentDiffPlugin', 'kz.documentdiff.plugin', __FILE__);
?>
注意点のみ
- 最初の2行のrequire_onceで必要なファイルを読み込んでる。
- namespaceは適当に。
- コンストラクタで親クラスのコンストラクタを呼んで、$resてのを返す必要があるっぽい。もしくはコンストラクタを作らなければ、勝手に親クラスのコンストラクタが使われる(はず←PHPのオブジェクト指向関連はあまり詳しくない)
- setupというメソッドで、後述のKTDocumentActionクラスの子クラスを登録する。
これでとりあえずプラグイン一覧画面に表示されるようになる。
<?php
require_once(KT_LIB_DIR . '/actions/documentaction.inc.php');
class DocumentDiffAction extends KTDocumentAction {
var $sName = 'kz.documentdiff.plugin.document.diff';
var $_sShowPermission = "ktcore.permissions.read";
var $sDisplayName = "Diff";
function DocumentDiffAction($oDocument = null, $oUser = null, $oPlugin = null) {
parent::KTDocumentAction($oDocument, $oUser, $oPlugin);
$this->sDisplayName=_kt('Diff');
}
function getName() {
return _kt('Diff');
}
function do_main() {
//これから・・・
}
}
?>
Actionの方はこれから勉強して書いていく…