プラグインの登録¶
プロジェクトの骨組みのジェネレーター¶
プラグインで自動的にプロジェクトの構造を作成するには cookiecutter が利用できます。
Cookiecutter をインストールする:
pip install -U cookiecutter
Run Kanboard cookiecutter:
cookiecutter gh:kanboard/cookiecutter-plugin
plugin_name [My Plugin]: Some Plugin
plugin_namespace [MyPlugin]: SomePlugin
plugin_author [Plugin Author]: Me
plugin_description [My plugin is awesome]:
plugin_homepage [https://github.com/kanboard/plugin-myplugin]:
ディレクトリの構造¶
プラグインは plugins サブディレクトリの中に保存されています。プラグインディレクトリの構造の例:
plugins
└── Budget <= Plugin name
├── Asset <= Javascript/CSS files
├── Controller
├── LICENSE <= Plugin license
├── Locale
│ ├── fr_FR
│ ├── it_IT
│ ├── ja_JP
│ └── zh_CN
├── Model
├── Plugin.php <= Plugin registration file
├── README.md
├── Schema <= Database migrations
├── Template
└── Test <= Unit tests
プラグインの登録ファイルの Plugin.php のみが必要です。それ以外のフォルダーは任意です。
プラグイン名の頭文字は大文字にする必要があります。
プラグインの登録ファイル¶
Kanboardは plugins ディレクトリをスキャンし、ディレクトリ以下にある物を自動的にロードします。Plugin.php ファイルはプラグインのロードと登録に使用されます。
Plugin.php (plugins/Foobar/Plugin.php) ファイルの例:
<?php
namespace Kanboard\Plugin\Foobar;
use Kanboard\Core\Plugin\Base;
class Plugin extends Base
{
public function initialize()
{
$this->template->hook->attach('template:layout:head', 'theme:layout/head');
}
public function getCompatibleVersion()
{
// Examples:
// >=1.0.37
// <1.0.37
// <=1.0.37
return '1.0.37';
}
}
このファイルは Kanboard\Plugin\Yourplugin 名前空間の下に Plugin クラスの定義を含んでいて、Kanboard\Core\Plugin\Base を拡張しなければなりません。
必要なメソッドは initialize() だけです。このメソッドはプラグインがロードされる時の要求の都度呼ばれます。
プラグインのメソッド¶
Kanboard\Core\Plugin\Base から利用可能なメソッド:
initialize(): プラグインがロードされた時に実行されるgetClasses(): Return all classes that should be stored in the dependency injection containeron($event, $callback): Listen on internal eventsgetPluginName(): Should return plugin name (must match plugins.json"title":entry for "Plugin Directory" version update notifications to work)getPluginAuthor(): Should return plugin authorgetPluginVersion(): Should return plugin versiongetPluginDescription(): Should return plugin descriptiongetPluginHomepage(): Should return plugin Homepage (link)setContentSecurityPolicy(array $rules): Override default HTTP CSP rulesonStartup(): If present, this method is executed automatically when the event “app.bootstrap” is triggeredgetCompatibleVersion(): You may want to specify the Kanboard version compatible with the plugin
Your plugin registration class can also inherit from
Kanboard\Core\Base, that way you can access
all classes and methods of Kanboard easily.
ユーザー #123 を取得する例:
$this->user->getById(123);
プラグインの翻訳¶
プラグインはアプリケーションと同じ方法で翻訳できます。 セッションが生成された時に、自身で翻訳をロードしなければなりません:
public function onStartup()
{
Translator::load($this->languageModel->getCurrentLanguage(), __DIR__.'/Locale');
}
翻訳ファイルは plugins/Myplugin/Locale/xx_XX/translations.php (xx_XX は、fr_FR, en_US…のように言語コードに置き換え) に保存されていなければなりません。
翻訳は連想配列として保存されていて、既知の文をオーバーライドしたいならば、翻訳ファイル中で同じキーを使用するだけで済みます。
DIコンテナ¶
Kanboard は、シンプルなPHPのDIの pimpleを使用します。 しかしながら、Kanboard はコンテナ内のクラスの登録を簡単に行えます。
これらのクラスはインスタンスを一つ作るだけで、アプリケーションのどこからでも利用可能です。
ここにコンテナ内のモデルを登録する例を示します:
public function getClasses()
{
return array(
'Plugin\Budget\Model' => array(
'HourlyRateModel',
'BudgetModel',
)
);
}
すでに、 Core\Base から拡張したクラスで、これらのインスタンスに直接アクセスできます。
$this->hourlyRateModel->remove(123);
$this->budgetModel->getDailyBudgetBreakdown(456);
// コンテナを使用するのと同じ事が起きます:
$this->container['hourlyRateModel']->getAll();
コンテナのキーはアプリケーションにわたってユニークです。既存のクラスをオーバーライドすれば、デフォルトの挙動を変更できます。