MovableTypeのRightFields Pluginでファイル形式のフィールドを作って、
エントリーごとに写真をアップロードしたらリサイズさせて、サムネイルも作るというプラグイン。RightFieldsのデータタイプはSQLの方じゃなくてPlugin領域を使う、configはめんどいのでプラグイン.plファイルに直書き、アップロード先・変換したファイルの保管場所固定という方針。
MT::Imageなんてのがあるんだね。便利だ。
package MT::Plugin::FieldThumb;
use strict;
use MT;
use MT::Image;
use Path::Class qw(file);
#settings
my $source_dir = 'files';
my $output_dir = 'photo';
my $main_photo_width = '400';
my $thumbnail_photo_width = '60';
my $plugin = new MT::Plugin({
name => "FieldThumb",
version => '0.01',
author_name => "Yusuke Wada",
author_link => "http://yusukebe.com",
});
MT->add_plugin($plugin);
my $mt = new MT;
my $rf_dir = $mt->mt_dir . "/plugins/RightFields/lib" ;
use RightFields;
MT::Entry->add_callback('pre_save',1,undef,\&pre_save_hdlr);
sub pre_save_hdlr{
my ($eh, $entry) = @_;
my $cfg = RightFields::blog_data('extra', $entry->blog_id);
my $obj = RightFields::new_obj($cfg,$entry->id);
my $column_value = $obj->column_values();
my $source_photo = $column_value->{'photo'};
my $pad_id = _pad_id($entry->id);
make_thumbnail($source_photo,$pad_id,$entry,$main_photo_width);
make_thumbnail($source_photo,$pad_id."-thumb",$entry,$thumbnail_photo_width);
#$output_name : do not include .jpg
sub make_thumbnail{
my ($input_name,$output_name,$entry,$width) = @_;
my $archive_path = $entry->blog->archive_path;
#my $output_file = $archive_path . "/" . $output_dir ."/" . $output_name . ".jpg";
my $output_file = file($archive_path, $output_dir, $output_name . ".jpg");
#if(-f $output_file){ return };
#my $filename = $archive_path . "/" . $source_dir . "/" . $input_name
my $filename = file($archive_path,$source_dir, $input_name);
my $img = MT::Image->new( Filename => $filename );
my($blob, $w, $h) = $img->scale( Width => $width );
open FH, ">$output_file" or die $!;
binmode FH;
print FH $blob;
close FH;
}
sub _pad_id{
my $old_id = shift;
my $zero_num = 6 - length($old_id);
my $new_id = "0" x $zero_num . $old_id;
return $new_id;
}
テンプレートファイルで
<img src="<$MTBlogURL$>photo/<$MTEntryID pad="1"$>-thumb.jpg" alt="<$MTEntryTitle$>" />
みたいにアクセスできる。割とニッチなPlugin。