5.5 KiB
Registracion de Plugin
Estructura del directorio
Los Plugins estan almacenados en el subdirectorio `plugins. Un ejemplo de estructura del directorio de un plugin:
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
Solamente el archivo de registración Plugin.php es requerido. Las otras carpetas son opcionales.
La primera letra del nombre del plugin debe ser capitalizada.
Archivo de registración del plugin
Kanboard Kanboard escaneará el directorio plugins y cargara automaticamente todo en este directorio. el archivo Plugin.php se utiliza para cargar y registrar el plugin.
Ejemplo del archivo 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');
}
}
Este archivo debera contener una clase Plugin se define en el namespace Kanboard\Plugin\Yourplugin y extiende Kanboard\Core\Plugin\Base.
El único método requerido es initialize(). Este método se llama para cada petición cuando el plugin es cargado.
Metodos del plugin
Los métodos disponibles son Kanboard\Core\Plugin\Base:
initialize(): ejecuta cuando el plugin es cargafogetClasses(): Regresa todas las clases que se deben almacenar en el contenedor de inyección de dependenciason($event, $callback): Escucha eventos internos.getPluginName(): devuelve el nombre del plugin.getPluginAuthor(): Devuelve el autor del plugin.getPluginVersion(): Devuelve la versíon del plugin.getPluginDescription(): Devuelve la descripcion del plugin.getPluginHomepage(): Devuelve la pagina inicial del plugin (link)setContentSecurityPolicy(array $rules): Reescribe las reglas por default del HTTP CSP.onStartup(): Si está presente este método, se ejecuta automáticamente cuando el evento "app.bootstrap" se dispara.
Su registro de plugin tambien puede heradar de la clase Kanboard\Core\Base, de esta manera se puede acceder a todas las clases y los métodos de Kanboard facilmente.
En este ejemplo se obtendrá el usuario #123:
$this->user->getById(123);
Plugin de traducción
Este plugin se puede traducir en la misma forma que el resto de la aplicación . Debe cargar las traducciones a sí mismo cuando se crea la sesión :
public function onStartup()
{
Translator::load($this->languageModel->getCurrentLanguage(), __DIR__.'/Locale');
}
Las traducciones deben ser almacenadas en el archivo plugins/Myplugin/Locale/xx_XX/translations.php (remplazar xx_XX por el codigo del lenguaje fr_FR, en_US...).
Las traducciones estan almacenadas en un diccionario, Si desea sobreescribir una cadena existente, sólo tiene que utilizar la misma clave en el archivo de traducción.
Inyección de dependencias de contenedores
Kanboard utiliza la Pimple , un simple inyección de contenedores de dependencia PHP . Sin embargo , Kanboard puede registrar cualquier clase en el contenedor fácilmente.
Estas clases están disponibles en todas partes en la aplicación y se crea una única instancia .
Aquí un ejemplo para registrar sus propios modelos en el contenedor:
public function getClasses()
{
return array(
'Plugin\Budget\Model' => array(
'HourlyRateModel',
'BudgetModel',
)
);
}
Ahora bien, si se utiliza una clase que se extiende desde Core\Base, tu puedes acceder directamente cualquier instancia de la clase:
$this->hourlyRateModel->remove(123);
$this->budgetModel->getDailyBudgetBreakdown(456);
// It's the same thing as using the container:
$this->container['hourlyRateModel']->getAll();
Llaves de los contenedores son únicos a través de la aplicación . Si reemplaza una clase existente , que va a cambiar el comportamiento por defecto .
Agregar un metodo nuevo en la API
Kanboard usa la libreria JSON-RPC para manejar las llamadas de la api.
Para agregar un nuevo metodo tu puedes que puede hacer algo para llamar a tu plugin:
$this->api->getProcedureHandler()->withCallback('my_method', function() {
return 'foobar';
});
$this->container['api'] or $this->api expose an instance of the object JsonRPC\Server.
Leer la documentacion de la libreria para mas información.
Agregar una nueva consola de comandos
Kanboard usa la libreria Symfony Console para manejar las lineas de comandos.
Kanboard genera una instancia del objeto Symfony\Component\Console\Application via $this->cli.
Tu puedes agregar nuevos comandos desde tu plugin:
$this->cli->add(new MyCommand());
Lea la documentación de la biblioteca para obtener más información.