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