Skip to content

Instantly share code, notes, and snippets.

@padawan
Forked from rayners/Plugin.pm
Created July 26, 2010 06:50
Show Gist options
  • Save padawan/490256 to your computer and use it in GitHub Desktop.
Save padawan/490256 to your computer and use it in GitHub Desktop.
<mtapp:setting
id="dynamic_setting"
label="Dynamic Setting">
<input type="text" name="dynamic_setting" value="<mt:var name="dynamic_setting">" />
</mtapp:setting>
<mt:loop name="custom_setting_loop">
<mtapp:setting
id="$setting_name"
label="$setting_name">
<input type="text" name="<mt:var name="setting_name">" value="<mt:var name="setting_value">" />
</mtapp:setting>
</mt:loop>
name: Plugin Name
settings:
dynamic_setting:
scope: blog
default: 0
settings_hash:
scope: blog
init: sub { my $p = shift; require PluginName::Plugin; bless $p, 'PluginName::Plugin', $p; }
config_template: config.tmpl
package PluginName::Plugin;
use strict;
use warnings;
use base qw( MT::Plugin );
use MT::Util qw(dirify);
sub load_config {
my $plugin = shift;
$plugin->SUPER::load_config(@_);
my ( $param, $scope ) = @_;
if ( $scope =~ /^blog:(\d+)$/ ) {
my $blog_id = $1;
# tweak $param as needed for values
# to pass to the config template
# for example, set dynamic_setting to the current time
$param->{dynamic_setting} = time;
require MT::Blog;
my $blog = MT::Blog->load($blog_id);
my $setting_name = dirify( $blog->name );
$param->{custom_setting_loop} = [
{ setting_name => $setting_name,
setting_value =>
$plugin->get_config_value( $setting_name, $scope ) || ${
$plugin->get_config_value( 'settings_hash', $scope ) || {}
}{$setting_name}
}
];
}
}
sub save_config {
my $plugin = shift;
my ( $param, $scope ) = @_;
if ( $scope =~ /^blog:(\d+)$/ ) {
my $blog_id = $1;
require MT::Blog;
my $blog = MT::Blog->load($blog_id);
my $setting_name = dirify( $blog->name );
my $setting_value = $param->{$setting_name};
$param->{settings_hash} = { $setting_name => $setting_value };
}
$plugin->SUPER::save_config(@_);
if ( $scope =~ /^blog:(\d+)$/ ) {
my $blog_id = $1;
require MT::Blog;
my $blog = MT::Blog->load($blog_id);
my $setting_name = dirify( $blog->name );
my $setting_value = $param->{$setting_name};
$plugin->set_config_value( $setting_name, $setting_value, $scope );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment