So.
Kurze abschliessende Codepräsentation.
Die Idee ist, dem CMS eine Plugin-Schnittstelle zu geben.
Dabei wird ein Text
"[plugin:
[name:Pluginname]
[param:Kommaseparierte Parameter]
]"
geparst und der sub user_plugin übergeben.
Die folgende Funktion muss den Pluginname (also das package des zu lesenden Moduls) und Parameter auslesen.
Errorbehandlung ist wichtig.
Gegenüber dem ursprünglichen Entwurf habe ich einen eval Block um den require Aufruf geschrieben.
Kein Meisterwerk aber hoffentlich tauglich.
sub user_plugin{
my $m = shift or return '';
my $plugin = '';
$m =~ /\[name:([A-Za-z]+)\]/ and $plugin = $1;
$plugin or return '<b class="warning">Plugin-Name nicht spezifiziert.</b>';
my @param = ();
$m =~ /\[param:([a-z0-9_.,-]+)\]/ and @param = split /,/, $1;
my $f = $Path{cgidir} . "EHFPlugins/". $plugin .'.pm';
(-e $f && -r $f) or return '<b class="warning">Plugin '.$plugin.' nicht gefunden oder hat keine Leserechte.</b>';
eval{ require( 'EHFPlugins/'.$plugin . '.pm') };
if( $@ ){ # $@ heisst $EVAL_ERROR
return '<b class="warning">Plugin '.$plugin.' konnte unerwartet nicht gestartet werden.</b>';
}
$m = $plugin . '::p';
my ($error, $content) = (1,'');
{
no strict 'refs';
($error, $content) = $m->(@param);
}
$error and return '<b class="warning">'.$content.'</b>';
return '<p class="info">'.$content.'</p>';
}
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische