Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Like this? Share it with your network

Share

初めてのMT plugin

  • 5,350 views
Uploaded on

Hokkaido.pm#3の資料です。

Hokkaido.pm#3の資料です。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,350
On Slideshare
4,291
From Embeds
1,059
Number of Embeds
6

Actions

Shares
Downloads
4
Comments
0
Likes
2

Embeds 1,059

http://hokkaido.pm.org 1,052
http://orhowilearnedtolovetheperl.com 2
http://paper.li 2
http://us-w1.rockmelt.com 1
http://a0.twimg.com 1
http://s.deeeki.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 初めての MovableType Plugin Hokkaido.pm#3 @onagatani
  • 2. ・自己紹介  - 名前:ながたに  - Twitter:@onagatani  - Perl歴:5年  - 仕事:MovableTypeを使ってます  - 好きなモジュール:   - DBIx::Skinny(ORマッパー)   - Kamui(WAF)   - Scope::Container(pnotes的) 2010/11/20 Hokkaido.pm #3 2
  • 3. ・MovableType(MT)?  - Perlで作られたCMS  - 元々はブログ  - よくWordPress(WP)と比較されます  - MTは静的出力、WPは動的出力  - 静的出力なので負荷にも強い  - Pluginを導入する事で機能拡張が可能  - 沢山のプラグインが公開されています 2010/11/20 Hokkaido.pm #3 3
  • 4. ・Plugin?  - プラグインで可能な主な機能   - 独自テンプレートタグの追加   - コールバックによる独自処理の追加   - 独自オブジェクトの追加   - 管理画面の拡張   - etc... 2010/11/20 Hokkaido.pm #3 4
  • 5. ・独自テンプレートタグの追加  - MTタグ? 例) <ul> <MTEntries lastn="10"> <li><$MTEntryTitle$>:<$MTEntryBody$></li> </MTEntries> </ul>    - よくあるテンプレートエンジンです   - プラグインでMTタグを追加したり、出力する文字列のフィルタリングなど 2010/11/20 Hokkaido.pm #3 5
  • 6. ・コールバックによる独自処理の追加  - コールバック?   - 特定の処理の中に独自の処理を追加する    ex) Class::Trigger   - 例えばエントリーを保存する時に本文をルー語変換(@tomitaさん )   - 管理画面から写真をアップロードする時にバリデーション    ex)日本語ファイルを禁止するなど 例) MT->add_callback($meth, $priority, $plugin, $code); 第一引数:コールバック・メソッドの名前 第二引数:実行される優先順位 第三引数:MT::Pluginオブジェクトへのリファレンス 第四引数:コールバック処理のコードリファレンス 2010/11/20 Hokkaido.pm #3 6
  • 7. ・独自オブジェクトの追加  - 独自オブジェクト?   - MTではORマッパーにData::ObjectDriver(D::OD)を使用しています   - D::ODを継承し機能を拡張したMT::Objectを継承して独自にクラスを    作成できます(テーブルを追加できます) 例 package Hoge::Foo::Object; use strict; use warnings; use base qw(MT::Object); __PACKAGE__->install_properties({ column_defs => { 'id' => 'integer not null auto_increment', 'entry_id' => 'integer not null', 'body' => 'string(255)', }, indexs => { entry_id => 1, }, audit => 1, datasource => 'foo', primary_key => [qw/ id /], }); 1; 2010/11/20 Hokkaido.pm #3 7
  • 8. ・管理画面の拡張  - 拡張?   - メニューを追加する   - ウィジェットを追加する   - エントリーの作成画面に新しい項目を追加する   - etc...  - 今回はとても簡単なプラグインを作成してみます   - ウィジェットを追加します   - プラグインとして作るファイルは2つだけ   - 機能も1つだけ    - ウィジェットを追加してHokkaido.pmのニュースを表示します 2010/11/20 Hokkaido.pm #3 8
  • 9. ・ニュース取得先  - 事前に以下のようなhtmlを設置します。今回はHokkaido.pm.orgのMTから   インデックステンプレートとして出力しています   (配信元がMTである必要はありません)   - URL:http://hokkaido.pm.org/widget_news.html    <ul> <li>2010.10.09 <a href="http://hokkaido.pm.org/event/hokkaidopm3.html">Hokkaido.pm#3 初心者向けイベント</a></li> </ul> 2010/11/20 Hokkaido.pm #3 9
  • 10. ・登録方法  - MTインストールディレクト内にあるpluginsディレクトリにplファイル   もしくはyamlファイルを設置するだけ(今回はplファイル)  - とにかくMT本体には一切手を入れない 例 package MT::Plugin::HokkaidoPM; use strict; use warnings; use base qw( MT::Plugin ); # pluginのベースとなるクラスを継承する our $MYNAME = 'Hokkaido.pm'; # プラグインの名前 our $VERSION = '0.01'; # バージョン my $plugin = __PACKAGE__->new({ name => $MYNAME, id => lc $MYNAME, key => lc $MYNAME, version => $VERSION, author_name => 'hokkaido.pm', # ここに登録した情報が表示されます author_link => 'http://hokkaido.pm.org/', description => <<__DESC__, <__trans phrase="widget of Hokkaido.pm"> __DESC__ }); MT->add_plugin( $plugin ); # 登録する 1; 2010/11/20 Hokkaido.pm #3 10
  • 11. ・登録方法  - 表示結果 登録(導入)されているプラグインが 表示されます 2010/11/20 Hokkaido.pm #3 11
  • 12. ・widgetを表示する  - widgetのデザインは?   - テンプレート設置します   - plファイルと同じ階層にtmplディレクトリを作成して設置   - 中身は他のwidgetとほとんど同じでMTタグを使用して記述します   - MTタグの記述方法についての説明は割愛します <mtapp:widget class="widget news-widget" tabbed="1" label="<__trans phrase="Hokkaido.pm">" can_close="1"> <mt:setvarblock name="widget_header"><ul class="tabs"> <li id="hokkaidopm-news-tab" class="tab selected-tab" mt:tab="hokkaido.pm" mt:command="select-tab"> <a href="javascript:void(0)"><span><__trans phrase="Hokkaido.pm"></span></a></li> </ul></mt:setvarblock> <div id="hokkaidopm-news-panel" mt:tab-content="hokkaido.pm"> <mt:if name="hokkaidopm_news"> <$mt:var name="hokkaidopm_news"$> <!-- ここに取得したニュースが表示されます --> <mt:else> <p><__trans phrase="No news from Hokkaido.pm available."></p> </mt:if> </div> </mtapp:widget> 2010/11/20 Hokkaido.pm #3 12
  • 13. ・widgetを表示する  - plファイルにwidgetテンプレートを登録する   - レジストリにテンプレートを登録します   - 先程のplファイルに以下を追記します    sub init_registry { my $plugin = shift; $plugin->registry({ applications => { cms => { widgets => { hokkaidopm => { label => 'Hokkaido.pm', # 表示名 template => 'tmpl/widget.tmpl', # テンプレートを登録 set => 'sidebar', #場所 }, }, }, }, }); } 2010/11/20 Hokkaido.pm #3 13
  • 14. ・widgetを表示する  - 表示結果    テンプレートの内容が表示されますが ニュースはまだ表示されていません 2010/11/20 Hokkaido.pm #3 14
  • 15. ・widgetを表示する  - ニュースを表示するために再度レジストリ登録部分などを修正します   - 以下にファイル全体を掲載します    package MT::Plugin::HokkaidoPM; use strict; use warnings; use MT::Util; #ニュースを取得する関数を使用するためにuseしておく use constant WIDGET_URL => 'http://hokkaido.pm.org/widget_news.html'; #取得先 our $MYNAME = 'Hokkaido.pm'; our $VERSION = '0.01'; use base qw( MT::Plugin ); my $plugin = __PACKAGE__->new({ name => $MYNAME, id => lc $MYNAME, key => lc $MYNAME, version => $VERSION, author_name => 'hokkaido.pm', author_link => 'http://hokkaido.pm.org/', description => <<__DESC__, <__trans phrase="widget of Hokkaido.pm"> __DESC__ }); MT->add_plugin( $plugin ); 2010/11/20 Hokkaido.pm #3 15
  • 16. ・widgetを表示する  - コードの続き    sub init_registry { my $plugin = shift; $plugin->registry({ applications => { cms => { widgets => { hokkaidopm => { label => 'Hokkaido.pm', template => 'tmpl/widget.tmpl', handler => sub { # 実際にwidgetを処理するコードリファレンスを登録します my ($app, $tmpl, $param) = @_;          # 指定したURLのニュースをDBに登録する機能です。登録されたデータを$paramに登録し、          # テンプレート上でhokkaidopm_news変数を使用すると展開されてニュースが表示されます $param->{hokkaidopm_news} = MT::Util::get_newsbox_html (WIDGET_URL, 'SW'); }, set => 'sidebar', }, }, }, }, }); } 1; __END__ 2010/11/20 Hokkaido.pm #3 16
  • 17. ・widgetを表示する  - 表示結果    ニュースが日時と共に表示されています 2010/11/20 Hokkaido.pm #3 17
  • 18. ・MTDDCの宣伝!  - シックス・アパート主催のカンファレンス  - YAPCで発表したMT開発陣が来ます!  - そしてJPA牧さんも来ます!  - 翌日にハッカソンがあるのでMT開発陣や   JPA牧さんと一緒にコードが書ける!!!  - 日程:MTDDC 12/18(土)      ハッカソン 12/19(日)  - 場所:札幌産業振興センター  - 懇親会:なんと無料です! 2010/11/20 Hokkaido.pm #3 18
  • 19. ご清聴ありがとう ございました 2010/11/20 Hokkaido.pm #3 19