だいたい194日前に更新最終更新日時: 2010-02-27 (土) 22:02:53 194日前
現在の位置
FrontPage > Perl > フレームワーク(MVC) > Sledge > Text-MicroTemplate
Sledge::Template::Text::MicroTemplate? †
Text::MicroTemplate::Extended を用いたテンプレートクラスです。
package Sledge::Template::Text::MicroTemplate; use strict; use warnings; use vars qw($VERSION); $VERSION = 0.01; use base qw(Sledge::Template); use Text::MicroTemplate::Extended; use Sledge::Exceptions; sub import { my $class = shift; my $pkg = caller(0); no strict 'refs'; *{"$pkg\::create_template"} = sub { my($self, $file) = @_; return $class->new($file, $self); }; } sub new { my($class, $file, $page) = @_; bless { _options => { filename => $file, INCLUDE_PATH => [ $page->create_config->tmpl_path, '.' ], }, _params => { config => $page->create_config, #r => $page->r, #session => $page->session, }, }, $class; } sub add_associate { Sledge::Exception::UnimplementedMethod->throw } sub associate_namespace { Sledge::Exception::UnimplementedMethod->throw } our $_mt = ''; sub output { my $self = shift; my $config = $self->{'_options'}; my $input = delete $config->{'filename'}; my $mt = $_mt ||= Text::MicroTemplate::Extended->new( 'extension' => $config->{'TMPL_EXTENTION'} ? $config->{'TMPL_EXTENTION'} : '.mt', 'use_cache' => $config->{'TMPL_USE_CACHE'} ? $config->{'USE_CACHE'} : 0, 'include_path' => $config->{'INCLUDE_PATH'}, 'macro' => $config->{'MACRO'}, ); unless (-e $input) { Sledge::Exception::TemplateNotFound->throw( 'No template file detected. Check your template path.', ); } $mt->template_args($self->{'_params'}); $input =~ s/\.([^.]+)$//; my $output = $mt->render($input); # render file: /path/to/document_root/content.mt return $output; } 1;
アプリ側のPagesクラスでの実装例 †
package Proj::Pages; use utf8; use strict; use warnings; use base qw(Sledge::Pages::Apache::I18N); . . . use Sledge::Template::Text::MicroTemplate; . . . sub create_template { my($self, $file) = @_; my $tmpl = Sledge::Template::Text::MicroTemplate->new($file, $self); $tmpl->add_option(INCLUDE_PATH => $self->create_config->tmpl_path.'/includes'); $tmpl->add_option(TMPL_USE_CACHE => 1); $tmpl->add_option(TMPL_EXTENTION => '.html'); $tmpl->add_option(MACRO =>{ autolink => \&Proj::Utils::autolink, }); $tmpl->param(r => $self->r); $tmpl->param(session => $self->session); return $tmpl; }
テンプレート例 †
view/index.html †
<?= include('includes/hd','SELECTED'=>'ROOT','member'=>$member) ?> <h1>hello, World.</h1> <h2><?= $config->service_title ?></h2> <?= include('includes/ft','SELECTED'=>'ROOT') ?>
view/includes/hd.html †
? my %args = @_; ? my $CSS_LAUNCH_TIMESTAMP = '20100211'; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="imagetoolbar" content="no" /> <meta name="keywords" content="<?= '' ?>" /> <meta name="description" content="" /> <title></title> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> <!--- CSS ---> <link href="/css/common.css?<?= $CSS_LAUNCH_TIMESTAMP ?>" rel="stylesheet" type="text/css" media="screen,print" /> <!--- /CSS ---> <!--- JS ---> <script type="text/javascript"><!-- /*@cc_on _d=document;eval('var document=_d')@*/ --></script> <!--- /JS ---> </head> <body> <div id="body_inner"> <div id="container" class="yui-t6"> <div id="hd" class="yui-g clearfix"> <div id="auth_area"> <span id="auth_area_wrap"> ? if ($args{member}){ <img src="<?= $args{member}->small_profile_image_url ?>" width="24" height="24" alt="<?= $args{member}->screen_name ?>" title="<?= $args{member}->screen_name ?>" /> ようこそ、 <?= $args{member}->screen_name ?> さん [ <a href="/login/twitter/logout">ログアウト</a> ] ? } else { ようこそ、 ゲストさん [ <a href="/login/twitter/?.done=<?= $current_uri ?>">ログイン</a> ] ? } # if member </span> </div><!-- /#auth_area --> </div><!-- /#hd --> <div id="bd" class="yui-g"> <div id="bd-main" class="yui-u first"> <div id="bd-main-inner"> <div id="bd-main-content">
view/incldues/ft.html †
</div><!-- /#bd-main-content --> </div><!-- /#bd-main-inner --> </div><!-- /#bd-main --> <div id="bd-sub" class="yui-u"> </div><!-- /#bd-sub --> </div><!-- /#bd --> <div id="ft"> <p id="ft-copyright">Copyright (C) <?= $now->year ?> xxxxx. All Rights Reserved.</p> </div><!-- /#ft --> </div><!-- /#container --> </div><!-- /#body_inner --> </body> </html>
- 関連ページ
ツールボックス
メニュー
最新の20件
最新の20件
2010-09-05
2010-09-01
2010-07-31
2010-07-27
2010-07-26
2010-04-23
2010-04-07
2010-04-04
2010-04-03
2010-03-31
2010-03-20
2010-03-19
2010-03-02
2010-02-28

