Scrivere Plugin per il Framework di IGSuite
A partire dalla release 3.2.4 di IGSuite è possibile realizzare ed integrare nella suite dei "plugin" per modificare o espandere le funzionalità del framework di IGSuite.
Il sistema dei plugin è molto flessibile e si basa sulla possibilità di "intercettare" l'output di alcune funzioni del framework prima che venga passato all'applicazione che ne fa richiesta. Il plugin può essere scritto da from-scratch oppure realizzato modificando un modello di default presente all'interno del pacchetto che spiega passo passo qual'è suo contenuto essenziale.
Fondamentalmente occorrerà scrivere degli "Hook" delle funzioni che agganciano rispettivamente le funzioni "core" del framework. Per esempio una delle funzioni disponibili ad essere agganciate è FormHead() che si occupa di aprire un form html di dati. In genere una chiamata a FormHead è scritta in questo modo:
my $html = FormHead( name => 'myform',
method => 'POST',
cgiaction => 'mycgiscript' );
Mettiamo il caso volessimo scrivere un plugin che (solo per esempio) modifichi tutti i form dello script "letters" cambiando il metodo di <form> da 'GET' a 'POST' il contenuto minimo del nostro plugin (solo a titolo d'esempio) sarebbe questo:
my $PluginDescription = 'Piccolo esempio';
my $NeedIgSuiteVersion = '3.2.4',
my %HooksFunctions = ( FormHead => 'fake_form_head' );
my %LimitToScripts = ( letters => 1 );
my %LimitToActions = ();
## Necessario alla registrazione del plugin
sub init
{
my $PluginName = shift;
return IG::PluginRegister( version => $NeedIgSuiteVersion,
name => $PluginName,
description => $PluginDescription,
limit_to_scripts => \%LimitToScripts,
limit_to_actions => \%LimitToActions,
functions => \%HooksFunctions );
}
## Ecco la nostra procedura
sub fake_form_head
{
my ($text, $arguments_ref) = @_;
return $text if $$arguments_ref{method} eq 'POST';
$text =~ s/(<form.+?method=\")GET\"/$1POST"/gi;
return $text;
}
NOTE: alla funzione fake_form_head() il framework di IGSuite passa due argomenti: L'Html generato dalla funzione agganciata ( FormHead() in questo caso) e un riferimenti all'hash degli argomenti ad essa passati. In questo esempio grazie a $$arguments_ref{method} abbiamo intercettato quale metodo è stato passato a FormHead().
Una volta realizzato il plugin e salvato all'interno del percorso /cgi-bin/data/plugins/ (generato in automatico anche da mkstructs.pl) con un nome che rispetti questa regular expression /^[a-zA-Z0-9\_]+\.pm$/, per renderlo effettivo occorre "registrarlo" semplicemente attraverso questo comando:
igsuited --register-plugins
Le funzioni disponibili ad essere utilizzate con il sistema dei plugin sono:
HtmlHead() HtmlFoot() DocHead()HttpHead() TaskHead()
TaskFoot() Button() FormHead() FormFoot() ParseLink()
MkTaskPage() DTable()
N.B. in ambienti mod_perl qualora si modifichino o scrivano nuovi plugin occorrerà riavviare Apache
|