プラグインのフック¶
新しいAPIのメソッドを追加する¶
Kanboard は API 呼び出しのハンドルに JSON-RPC ライブラリを使用しています。
以下の要領で、あなたのプラグインから新しいメソッドを追加できます。
$this->api->getProcedureHandler()->withCallback('my_method', function() {
return 'foobar';
});
$this->container['api'] か、 $this->api がインスタンスのオブジェクト JsonRPC\Server を示します。
さらなる情報はライブラリの文書を参照願います。
新しいコンソールのコマンドを追加¶
Kanboard は Symfony Console ライブラリをローカルのコマンドラインのハンドルに使用しています。
$this->cli経由で インスタンスのオブジェクトSymfony\Component\Console\Applicationが Kanboard に示されます。プラグインから新しいコマンドを追加することができます:
$this->cli->add(new MyCommand());
さらなる情報はライブラリの文書を参照願います。
新しいタスクのフィルターを追加する¶
タスクの字句解析器が新しいインスタンスを都度返すので、 extend() メソッドか、pimpleによって taskLexer コンテナを拡張しなければなりません。
ここに例を示します:
public function initialize()
{
$this->container->extend('taskLexer', function($taskLexer, $c) {
$taskLexer->withFilter(TaskBoardDateFilter::getInstance($c)->setDateParser($c['dateParser']));
return $taskLexer;
});
}
いくつかのフィルタークラスの実装の例は、 Kanboard\Filter 名前空間の下のソースコードにあります。
アプリケーションのフック¶
フックは拡張、置き換えが可能で、デフォルトでの動作はデータのフィルタリングや変更です。
各々のフックは、例えば controller:calendar:user:events のように、ユニークな名前で識別されます。
イベントのフックのリッスン¶
initialize() メソッド内で、Kanboard\Core\Plugin\Hook クラス内の on() メソッドを呼ぶ必要があります:
$this->hook->on('hook_name', $callable);
最初の引数はフックの名前で、2つめはPHPのcallableです。
フックを一度だけ実行する¶
いくつかのフックは一つだけのリスナーを持つことができます: model:subtask-time-tracking:calculate:time-spent
- サブタスクのタイマーが止まった時、消費時間の計算をオーバーライドする
- 引数:
$user_id(integer)$start(DateTime)$end(DateTime)
フックのマージ¶
“フックのマージ” の挙動は array_merge 関数と同様です。フックのコールバックは配列を返す必要があります。この配列は最初の配列にマージされます。
ユーザーのカレンダーにイベントを追加する例:
class Plugin extends Base
{
public function initialize()
{
$container = $this->container;
$this->hook->on('controller:calendar:user:events', function($user_id, $start, $end) use ($container) {
$model = new SubtaskForecast($container);
return $model->getCalendarEvents($user_id, $end); // Return new events
});
}
}
タスクのフォームのデフォルト値をオーバーライドする例:
class Plugin extends Base
{
public function initialize()
{
$this->hook->on('controller:task:form:default', function (array $default_values) {
return empty($default_values['score']) ?array('score' => 4) : array();
});
}
}
マージしたフックのリスト:
controller:task:form:default
タスクのフォームのデフォルト値をオーバーライド - 引数:
$default_values: 実際のデフォルト値 (array)
controller:calendar:project:events
- プロジェクトのカレンダーにイベントを追加する
- 引数:
$project_id(integer)$startカレンダーの開始日 (string, ISO-8601 書式)$endカレンダーの終了日 (string, ISO-8601 書式)
controller:calendar:user:events
- ユーザーのカレンダーに更にイベントを追加する場合
- 引数:
$user_id(integer)$startカレンダーの開始日 (string, ISO-8601 書式)$endカレンダーの終了日 (string, ISO-8601 書式)
アセットのフック¶
アセットのフックは簡単に新しいスタイルシートを追加したり、レイアウトに新しくJavaScriptファイルを追加するのに利用されます。この特徴を利用すると、新しいテーマを作成して Kanboard のデフォルトのスタイルをオーバーライドすることができます。
新しいスタイルシートを追加する例:
<?php
namespace Kanboard\Plugin\Css;
use Kanboard\Core\Plugin\Base;
class Plugin extends Base
{
public function initialize()
{
$this->hook->on('template:layout:css', array('template' => 'plugins/Css/skin.css'));
}
}
アセットのフックのリスト:
template:layout:csstemplate:layout:js
フックの参照¶
フックの参照は、変数の参照はパスされます。
例:
$this->hook->on('formatter:board:query', function (\PicoDb\Table &query) {
$query->eq(TaskModel::TABLE.'color_id', 'red');
});
上述のコードはボード上のタスクを赤のみで表示します。
フックのリストの参照:
フックのテンプレート¶
フックのテンプレートは既存のテンプレートに内容を追加することができます。
ダッシュボードのサイドバーに新しい内容を追加する例:
$this->template->hook->attach('template:dashboard:sidebar', 'myplugin:dashboard/sidebar');
テンプレートにローカル変数を付ける例:
$this->template->hook->attach('template:dashboard:sidebar', 'myplugin:dashboard/sidebar', [
'variable' => 'foobar',
]);
テンプレートにcallableを付ける例:
$this->template->hook->attachCallable('template:dashboard:sidebar', 'myplugin:dashboard/sidebar', function($hook_param1, $hook_param2) {
return ['new_template_variable' => 'foobar']; // Inject a new variable into the plugin template
});
この呼び出しは ``initialize()``メソッド内の定義に使われます。最初の引数はフックの名前で、2つ目の引数はテンプレート名です。
テンプレート名はプラグイン名の接頭辞で、コロン(:)でテンプレートの場所を示します。
myplugin:dashboard/sidebar を例にとります:
mypluginはあなたのプラグイン名 (小文字)dashboard/sidebarはテンプレート名です- ファイルシステム上では、プラグインは以下にあります:
plugins\Myplugin\Template\dashboard\sidebar.php - テンプレートは純粋なPHPで書かれています (エスケープのデータを忘れないでください)
テンプレート名はコアとなるテンプレートの接頭辞はありません.
フックのテンプレートのリスト: