Thread Techniken für Plugin-Einbindung (3 answers)
Opened by marky at 2011-09-24 12:58

topeg
 2011-09-24 14:19
#152650 #152650
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Bei Templateplugins würde ich zu einer Klasse raten, die zwangsweise von einer andern erbt:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
my $plugincode=load_code();
my $dataobj=get_data_object();

$plugincount++;

$pugincode=<<EOC;
{ package PLUGIN::PLUGINS::$pugincount;
use base 'PLUGIN::BASE';
use strict;
use warnings;

$plugincode;

1;}
EOC

my $pluginobj;

if(eval(plugincode))
{
  $pluginobj=eval("PLUGIN::PLUGINS::$pugincount->new($dataobj)")
  if(!$pluginobj)
  {
    # create error
  }
}
else
{
  # copmile error
}
#...

$pluginobj->mach_was();


Wenn man ganz vorsichtig sein will, kann man auch Forken und über IPC mit dem Plugin kommunizieren. Das sähe gar nicht so anders aus. Nur das Paket, von dem Geerbt wird, ist komplexer.

Beu Codeplugins würde ich auf Signalhandler setzen, die kann man überall einfügen und machen am wenigsten Probleme, finde ich.
Das Laden wäre ähnlich zu dem was ich oben gezeigt habe, nur dass kein Datenobjekt übergeben wird sondern das "System"-Objekt.

Im Plugin
Code (perl): (dl )
1
2
my $id=$obj->handler_add('aktion',sub{ ... },@options);
$obj->handler_del($id);


im System Code
Code (perl): (dl )
$obj->handler_exec('aktion',@data) if($obj->handler_exists('aktion'));


Hier könne man auch Einbauen, dass Code der nicht "true" zurück liefert aus der Handlerliste gelöscht wird.

View full thread Techniken für Plugin-Einbindung