プラグインのフック¶
新しい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:css
template: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で書かれています (エスケープのデータを忘れないでください)
テンプレート名はコアとなるテンプレートの接頭辞はありません.
フックのテンプレートのリスト: