BootstrapTest01
構成
$MT_DIR/
|__ plugins/
| |__ BootstrapTest01/
| |__ config.yaml
| |__ newapp.cgi
| |__ lib/
| | |__ BootstrapTest01
| | |__ Bootstrap01.pm
| | |__ NewApp.pm
| | |__ L10N.pm
| | |__ L10N/
| | |__ ja.pm
| | |__ en_us.pm
| |__ tmpl/
| |__ view_foo.tmpl
| |__ new_foo.tmpl
| |__ edit_foo.tmpl
ソース
config.yaml
id: BootstrapTest01
key: BootstrapTest01
name: <__trans phrase="_BOOTSTRAPTEST01_NAME_">
version: 1.0
description: <__trans phrase="_BOOTSTRAPTEST01_DESCRIPTION">
author_name: <__trans phrase="_BOOTSTRAPTEST01_AUTHOR">
author_link: http://www.example.com/about/
doc_link: http://www.example.com/docs/
# 言語対応
l10n_class: BootstrapTest01::L10N
# 独自オブジェクトの定義
schema_version: 0.01
object_types:
bootstrap01: BootstrapTest01::Bootstrap01
lib/BootstrapTest01/Bootstrap01.pm
package BootstrapTest01::Bootstrap01;
use strict;
use base qw( MT::Object );
__PACKAGE__->install_properties ({
column_defs => {
'id' => 'integer not null auto_increment',
'blog_id' => 'integer not null',
'title' => 'string(255) not null',
'bar' => 'text',
},
indexes => {
blog_id => 1,
created_on => 1,
modified_on => 1,
},
child_of => '',
audit => 1,
datasource => 'bootstrap01',
primary_key => 'id',
class_type => 'bootstrap01',
});
1;
lib/BootstrapTest01/L10N.pm
package BootstrapTest01::L10N;
use strict;
use base 'MT::Plugin::L10N';
1;
lib/BootstrapTest01/L10N/ja.pm
package BootstrapTest01::L10N::ja;
use strict;
use base 'BootstrapTest01::L10N::en_us';
use vars qw( %Lexicon );
%Lexicon = (
'_BOOTSTRAPTEST01_NAME_' => 'BootstrapTest01',
'_BOOTSTRAPTEST01_DESCRIPTION' => 'BootstrapTest01のテスト',
'_BOOTSTRAPTEST01_AUTHOR' => 'プラグイン作者',
);
1;
lib/BootstrapTest01/L10N/en_us.pm
package BootstrapTest01::L10N::en_us;
use strict;
use base 'BootstrapTest01::L10N';
use vars qw( %Lexicon );
%Lexicon = (
'_BOOTSTRAPTEST01_NAME_' => 'ObjectTest01',
'_BOOTSTRAPTEST01_DESCRIPTION' => 'ObjectTest01 Test',
'_BOOTSTRAPTEST01_AUTHOR' => 'ObjectTest01 author',
);
1;
lib/BootstrapTest01/NewApp.pm
package BootstrapTest01::NewApp;
use strict;
use base qw( MT::App );
sub init_request {
my $app = shift;
$app->SUPER::init_request(@_);
$app->add_methods( main => \&view,
view => \&view,
new => \&foo_new,
edit => \&edit,
save => \&save,
);
$app->{ default_mode } = 'main';
$app->{ requires_login } = 1;
}
sub view {
my $app = shift;
my $q = $app->param;
my $blog_id = $q->param('blog_id');
my $blog = MT->model('blog')->load($blog_id);
my $class = $app->model('bootstrap01');
my ( $terms, $args );
$terms = { blog_id => $blog_id };
$args = { sort => 'created_on',
direction => 'descend',
limit => 10,
};
my @foos = $class->load( $terms, $args );
my $param;
$param = { blog_name => $blog->name,
foos => \@foos,
plugin_template_path => 'tmpl',
};
$app->build_page( 'view_foo.tmpl', $param );
}
sub edit {
my $app = shift;
my $q = $app->param;
my $blog_id = $q->param('blog_id');
my $blog = MT->model('blog')->load($blog_id);
my $id = $q->param('id');
my $class = $app->model('bootstrap01');
my $foo = $class->load( $id );
my $param;
$param = { blog_name => $blog->name,
id => $id,
blog_id => $blog_id,
title => $foo->title(),
bar => $foo->bar(),
plugin_template_path => 'tmpl',
};
$app->build_page( 'edit_foo.tmpl', $param );
}
sub save {
my $app = shift;
my $q = $app->param;
my $blog_id = $q->param('blog_id');
my $blog = MT->model('blog')->load($blog_id);
my $class = $app->model('bootstrap01');
my $foo;
my $id;
if ( $id = $q->param('id') ) {
$foo = $class->load($id);
} else {
$foo = $class->new();
$foo->blog_id($blog_id);
}
$foo->title($q->param('title'));
$foo->bar($q->param('bar'));
$foo->save()
or die $foo->errstr;
$app->redirect( $app->return_uri . "blog_id=$blog_id" );
}
sub foo_new {
my $app = shift;
my $q = $app->param;
my $blog_id = $q->param('blog_id');
my $blog = MT->model('blog')->load($blog_id);
my $param = { blog_name => $blog->name,
blog_id => $blog_id,
};
$app->build_page( 'new_foo.tmpl', $param );
}
1;
tmpl/view_foo.tmpl
<html>
<head>
<title>MT::Foo View</title>
</head>
<body>
<h1><mt:var name="blog_name" encode_html=1/></h1>
<ul>
<mt:loop name="foos">
<li><a href="<mt:GetVar name="script_url" />?__mode=edit&id=<mt:GetVar name="id" />&blog_id=<mt:GetVar name="blog_id" />"><mt:GetVar name="title" encode_html=1/></a></li>
</mt:loop>
</ul>
<p><a href="<mt:GetVar name="script_url" />?__mode=new&blog_id=2">New</a></p>
</body>
</html>
tmpl/new_foo.tmpl
<html>
<head>
<title>MT::Foo New</title>
</head>
<body>
<h1><mt:var name="blog_name" /></h1>
<form method="post" action="<mt:GetVar name="script_url" />">
<input type="hidden" name="__mode" value="save">
<input type="hidden" name="blog_id" value="<mt:GetVar name="blog_id">">
<table border="2">
<tr><td>blog_id</td><td><mt:GetVar name="blog_id"></td></tr>
<tr><td>title</td><td><input name="title" type="text" value="<mt:GetVar name="title">"></td></tr>
<tr><td>bar</td><td><textarea name="bar"><mt:GetVar name="bar"></textarea></td></tr>
</table>
<br />
<input type="submit">
</form>
<p><a href="<mt:GetVar name="script_url" />?__mode=main&blog_id=2">Back</a></p>
</body>
</html>
tmpl/edit_foo.tmpl
<html>
<head>
<title>MT::Foo Edit</title>
</head>
<body>
<h1><mt:var name="blog_name" /></h1>
<form method="post" action="<mt:GetVar name="script_url" escape_html=1 />">
<input type="hidden" name="__mode" value="save">
<input type="hidden" name="id" value="<mt:GetVar name="id">">
<input type="hidden" name="blog_id" value="<mt:GetVar name="blog_id">">
<table border="2">
<tr><td>id</td><td><mt:GetVar name="id"></td></tr>
<tr><td>blog_id</td><td><mt:GetVar name="blog_id"></td></tr>
<tr><td>title</td><td><input name="title" type="text" value="<mt:GetVar name="title" escape_html=1>"></td></tr>
<tr><td>bar</td><td><textarea name="bar"><mt:GetVar name="bar" escape_html=1></textarea></td></tr>
</table>
<br />
<input type="submit"><input type="reset">
</form>
<p><a href="<mt:GetVar name="script_url" />?__mode=main&blog_id=2">Back</a></p>
</body>
</html>
結果
URLアクセス
初期ページ(ブログID未指定)
新規編集
データ設定
保存後、ブログ別一覧表示
最終更新:2012年02月09日 20:56