Ir al contenido

Plugins

Un plugin agrega funcionalidad al escritorio de Histrix sin modificar el motor. Define funciones internas y las registra en uno o más hooks; el motor las ejecuta en el momento y lugar correspondientes.

El cargador de plugins busca en tres lugares, en este orden:

Ruta Alcance
database/{base}/plugins/ Solo esa base
plugins/ Toda la instalación
modules/{módulo}/plugins/ Las bases que usan ese módulo

Cada plugin vive en su propio directorio y contiene un archivo de clase con el mismo nombre que el directorio:

  • Directoriohistrix/
    • Directorioplugins/
      • Directoriotest/
        • test.php

La clase extiende \Histrix\Plugin\Plugin y registra sus funciones en init():

<?php
class test extends \Histrix\Plugin\Plugin
{
public function init()
{
$this->registerFunction('trayInit', 'display');
$this->registerFunction('statusBarInit', 'status');
}
public function display()
{
echo '<b>TEST PLUGIN</b>';
}
public function status()
{
echo '<div>Test Status Bar Plugin</div>';
}
}

Las funciones registradas con registerFunction($hook, $función) se ejecutan desde PHP.

Hook Momento de ejecución
preSessionInit Antes de inicializar la sesión
desktopInit Al iniciar el escritorio de Histrix
statusBarInit Al iniciar la barra de estado inferior
trayInit Al iniciar el área de notificación del panel superior
javascriptLoad Al inicio; debe devolver un arreglo de archivos JavaScript a cargar
javascriptInit Al inicio; debe devolver código JavaScript válido
cssLoad Al inicio; debe devolver un arreglo de archivos CSS a cargar
afterSysmon Al final del monitor de sistema, que corre periódicamente
afterSysmonScripts Igual que el anterior; debe devolver un arreglo de sentencias JavaScript

Se registran desde init() con registerJavascriptFunction($hook, $función) y se ejecutan en el navegador:

class test extends \Histrix\Plugin\Plugin
{
public function init()
{
$this->registerJavascriptFunction('afterLoadXml', 'myFunction');
}
}
Hook Momento de ejecución
beforeLoadXml Antes de Histrix.LoadXML
afterLoadXml Después de Histrix.LoadXML

Ambos reciben los mismos parámetros:

function miFuncion(contenido, { programTitle: title, container: xmldatos }) {}
// contenido: variables GET enviadas — xml (nombre del XML) y dir (directorio)

Cada plugin puede declarar opciones en setDefaultOptions(). El motor las persiste en la tabla HTXOPTIONS con la clave PLUGIN::{Clase}::{opción} y las expone en el panel de configuración, agrupadas por plugin.

Todo plugin recibe automáticamente una opción enable, que arranca en false: hay que habilitarlo explícitamente desde la configuración de la base.

class weather extends \Histrix\Plugin\Plugin
{
public function setDefaultOptions()
{
$this->addOption('ciudad', [
'name' => 'Ciudad',
'description' => 'Ciudad para el pronóstico',
'value' => 'Rosario',
]);
}
}

El valor se lee con $this->getParameter('ciudad').

La instalación trae, entre otros: autoInit (autoarranque de programas), directLink (enlaces directos a programas), htxchat, htxconfig, htxHud y htxHudCmd (panel de estado y comandos), htxusermenu, lastPrograms, localNews, screenSaverLed, ShowProfile, statusMessage y userStatus.