Handlers
Some configuration directives may have a default value, but a default value that may be dependent upon other variables in the system. Therefore a static default value may not suffice. For example, you may have a configuration directive that is dependent upon where you have Apache installed, and it will formulate a path based on that if a explicit value is not set by an administrator.
To achieve this, you need to use the handler
option like so:
config_settings:
MyLogPath:
handler: $Example::Example::Plugin::MyLogPath
path: 1
Then, in your Plugin.pm
file you add the following subroutine (comments have been added to the code to help make sense of what is going on):
sub MyLogPath {
my $mgr = shift; # A reference to MT::ConfigMgr
# a value was set for this directive (in mt-config.cgi, database config,
# or maybe some other plugin setting us) so let's use it
return $mgr->set_internal( 'MyLogPath', @_ ) if @_;
# user is attempting to retrieve the value
my $name = $mgr->get_internal('MyLogPath');
# if a value has been explicitly set, return it
return $name if defined $name;
# Ok, guess what the value should be:
if ($ENV{HTTPD_HOME}) {
return $ENV{HTTPD_HOME} . '/logs';
} else {
return 'logs/';
}
}