0
初めての
MovableType Plugin
Hokkaido.pm#3
@onagatani
・自己紹介
 - 名前:ながたに
 - Twitter:@onagatani
 - Perl歴:5年
 - 仕事:MovableTypeを使ってます
 - 好きなモジュール:
  - DBIx::Skinny(ORマッパー)
  - Kamui...
・MovableType(MT)?
 - Perlで作られたCMS
 - 元々はブログ
 - よくWordPress(WP)と比較されます
 - MTは静的出力、WPは動的出力
 - 静的出力なので負荷にも強い
 - Pluginを導入する事で...
・Plugin?
 - プラグインで可能な主な機能
  - 独自テンプレートタグの追加
  - コールバックによる独自処理の追加
  - 独自オブジェクトの追加
  - 管理画面の拡張
  - etc...
2010/11/20 4Hokkai...
・独自テンプレートタグの追加
 - MTタグ?
 
 - よくあるテンプレートエンジンです
  - プラグインでMTタグを追加したり、出力する文字列のフィルタリングなど
2010/11/20 5Hokkaido.pm #3 5
例)
<ul>
...
・コールバックによる独自処理の追加
 - コールバック?
  - 特定の処理の中に独自の処理を追加する
   ex) Class::Trigger
  - 例えばエントリーを保存する時に本文をルー語変換(@tomitaさん )
  - 管理画面...
・独自オブジェクトの追加
 - 独自オブジェクト?
  - MTではORマッパーにData::ObjectDriver(D::OD)を使用しています
  - D::ODを継承し機能を拡張したMT::Objectを継承して独自にクラスを
   作...
・管理画面の拡張
 - 拡張?
  - メニューを追加する
  - ウィジェットを追加する
  - エントリーの作成画面に新しい項目を追加する
  - etc...
 - 今回はとても簡単なプラグインを作成してみます
  - ウィジェットを追加...
・ニュース取得先
 - 事前に以下のようなhtmlを設置します。今回はHokkaido.pm.orgのMTから
  インデックステンプレートとして出力しています
  (配信元がMTである必要はありません)
  - URL:http://hokk...
・登録方法
 - MTインストールディレクト内にあるpluginsディレクトリにplファイル
  もしくはyamlファイルを設置するだけ(今回はplファイル)
 - とにかくMT本体には一切手を入れない
2010/11/20 10Hokkaid...
・登録方法
 - 表示結果
2010/11/20 11Hokkaido.pm #3 11
登録(導入)されているプラグインが
表示されます
・widgetを表示する
 - widgetのデザインは?
  - テンプレート設置します
  - plファイルと同じ階層にtmplディレクトリを作成して設置
  - 中身は他のwidgetとほとんど同じでMTタグを使用して記述します
  - ...
・widgetを表示する
 - plファイルにwidgetテンプレートを登録する
  - レジストリにテンプレートを登録します
  - 先程のplファイルに以下を追記します
  
2010/11/20 13Hokkaido.pm #3 13
s...
・widgetを表示する
 - 表示結果
  
2010/11/20 14Hokkaido.pm #3 14
テンプレートの内容が表示されますが
ニュースはまだ表示されていません
・widgetを表示する
 - ニュースを表示するために再度レジストリ登録部分などを修正します
  - 以下にファイル全体を掲載します
  
2010/11/20 15Hokkaido.pm #3 15
package MT::Plugin::...
・widgetを表示する
 - コードの続き
  
2010/11/20 16Hokkaido.pm #3 16
sub init_registry {
my $plugin = shift;
$plugin->registry({
appli...
・widgetを表示する
 - 表示結果
  
2010/11/20 17Hokkaido.pm #3 17
ニュースが日時と共に表示されています
・MTDDCの宣伝!
 - シックス・アパート主催のカンファレンス
 - YAPCで発表したMT開発陣が来ます!
 - そしてJPA牧さんも来ます!
 - 翌日にハッカソンがあるのでMT開発陣や
  JPA牧さんと一緒にコードが書ける!!!
 ...
ご清聴ありがとう
ございました
2010/11/20 19Hokkaido.pm #3 19
Upcoming SlideShare
Loading in...5
×

初めてのMT plugin

4,992

Published on

Hokkaido.pm#3の資料です。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,992
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "初めてのMT plugin"

  1. 1. 初めての MovableType Plugin Hokkaido.pm#3 @onagatani
  2. 2. ・自己紹介  - 名前:ながたに  - Twitter:@onagatani  - Perl歴:5年  - 仕事:MovableTypeを使ってます  - 好きなモジュール:   - DBIx::Skinny(ORマッパー)   - Kamui(WAF)   - Scope::Container(pnotes的) 2010/11/20 2Hokkaido.pm #3 2
  3. 3. ・MovableType(MT)?  - Perlで作られたCMS  - 元々はブログ  - よくWordPress(WP)と比較されます  - MTは静的出力、WPは動的出力  - 静的出力なので負荷にも強い  - Pluginを導入する事で機能拡張が可能  - 沢山のプラグインが公開されています 2010/11/20 3Hokkaido.pm #3 3
  4. 4. ・Plugin?  - プラグインで可能な主な機能   - 独自テンプレートタグの追加   - コールバックによる独自処理の追加   - 独自オブジェクトの追加   - 管理画面の拡張   - etc... 2010/11/20 4Hokkaido.pm #3 4
  5. 5. ・独自テンプレートタグの追加  - MTタグ?    - よくあるテンプレートエンジンです   - プラグインでMTタグを追加したり、出力する文字列のフィルタリングなど 2010/11/20 5Hokkaido.pm #3 5 例) <ul> <MTEntries lastn="10"> <li><$MTEntryTitle$>:<$MTEntryBody$></li> </MTEntries> </ul>
  6. 6. ・コールバックによる独自処理の追加  - コールバック?   - 特定の処理の中に独自の処理を追加する    ex) Class::Trigger   - 例えばエントリーを保存する時に本文をルー語変換(@tomitaさん )   - 管理画面から写真をアップロードする時にバリデーション    ex)日本語ファイルを禁止するなど 2010/11/20 6Hokkaido.pm #3 6 例) MT->add_callback($meth, $priority, $plugin, $code); 第一引数:コールバック・メソッドの名前 第二引数:実行される優先順位 第三引数:MT::Pluginオブジェクトへのリファレンス 第四引数:コールバック処理のコードリファレンス
  7. 7. ・独自オブジェクトの追加  - 独自オブジェクト?   - MTではORマッパーにData::ObjectDriver(D::OD)を使用しています   - D::ODを継承し機能を拡張したMT::Objectを継承して独自にクラスを    作成できます(テーブルを追加できます) 2010/11/20 7Hokkaido.pm #3 7 例 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;
  8. 8. ・管理画面の拡張  - 拡張?   - メニューを追加する   - ウィジェットを追加する   - エントリーの作成画面に新しい項目を追加する   - etc...  - 今回はとても簡単なプラグインを作成してみます   - ウィジェットを追加します   - プラグインとして作るファイルは2つだけ   - 機能も1つだけ    - ウィジェットを追加してHokkaido.pmのニュースを表示します 2010/11/20 8Hokkaido.pm #3 8
  9. 9. ・ニュース取得先  - 事前に以下のようなhtmlを設置します。今回はHokkaido.pm.orgのMTから   インデックステンプレートとして出力しています   (配信元がMTである必要はありません)   - URL:http://hokkaido.pm.org/widget_news.html    2010/11/20 9Hokkaido.pm #3 9 <ul> <li>2010.10.09 <a href="http://hokkaido.pm.org/event/hokkaidopm3.html">Hokkaido.pm#3 初心者向けイベント</a></li> </ul>
  10. 10. ・登録方法  - MTインストールディレクト内にあるpluginsディレクトリにplファイル   もしくはyamlファイルを設置するだけ(今回はplファイル)  - とにかくMT本体には一切手を入れない 2010/11/20 10Hokkaido.pm #3 10 例 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;
  11. 11. ・登録方法  - 表示結果 2010/11/20 11Hokkaido.pm #3 11 登録(導入)されているプラグインが 表示されます
  12. 12. ・widgetを表示する  - widgetのデザインは?   - テンプレート設置します   - plファイルと同じ階層にtmplディレクトリを作成して設置   - 中身は他のwidgetとほとんど同じでMTタグを使用して記述します   - MTタグの記述方法についての説明は割愛します 2010/11/20 12Hokkaido.pm #3 12 <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>
  13. 13. ・widgetを表示する  - plファイルにwidgetテンプレートを登録する   - レジストリにテンプレートを登録します   - 先程のplファイルに以下を追記します    2010/11/20 13Hokkaido.pm #3 13 sub init_registry { my $plugin = shift; $plugin->registry({ applications => { cms => { widgets => { hokkaidopm => { label => 'Hokkaido.pm', # 表示名 template => 'tmpl/widget.tmpl', # テンプレートを登録 set => 'sidebar', #場所 }, }, }, }, }); }
  14. 14. ・widgetを表示する  - 表示結果    2010/11/20 14Hokkaido.pm #3 14 テンプレートの内容が表示されますが ニュースはまだ表示されていません
  15. 15. ・widgetを表示する  - ニュースを表示するために再度レジストリ登録部分などを修正します   - 以下にファイル全体を掲載します    2010/11/20 15Hokkaido.pm #3 15 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 );
  16. 16. ・widgetを表示する  - コードの続き    2010/11/20 16Hokkaido.pm #3 16 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__
  17. 17. ・widgetを表示する  - 表示結果    2010/11/20 17Hokkaido.pm #3 17 ニュースが日時と共に表示されています
  18. 18. ・MTDDCの宣伝!  - シックス・アパート主催のカンファレンス  - YAPCで発表したMT開発陣が来ます!  - そしてJPA牧さんも来ます!  - 翌日にハッカソンがあるのでMT開発陣や   JPA牧さんと一緒にコードが書ける!!!  - 日程:MTDDC 12/18(土)      ハッカソン 12/19(日)  - 場所:札幌産業振興センター  - 懇親会:なんと無料です! 2010/11/20 18Hokkaido.pm #3 18
  19. 19. ご清聴ありがとう ございました 2010/11/20 19Hokkaido.pm #3 19
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×