WordPress on Movable Type

27
藤本 2013/9/20 YAPC::Asia Tokyo 2013

description

Movable Type上でWordPressのデータを扱うことができる「WPConnector」というプラグインの紹介です(YAPC::Asia Tokyo 2013バージョン)。

Transcript of WordPress on Movable Type

Page 1: WordPress on Movable Type

藤本 壱2013/9/20

YAPC::Asia Tokyo 2013

Page 2: WordPress on Movable Type

自己紹介

WPConnectorプラグインの概要

WPConnectorプラグインの内部動作

まとめ

Page 3: WordPress on Movable Type
Page 4: WordPress on Movable Type

藤本 壱(ふじもと はじめ)

兵庫県伊丹市出身

群馬県前橋市在住

Page 5: WordPress on Movable Type

本職はPC系のフリーライター

2004年秋からMovable Typeユーザー

さまざまなプラグインを開発

Page 6: WordPress on Movable Type
Page 7: WordPress on Movable Type

テーマ/プラグインが豊富

動的出力(管理者にとって手間が少ない)

テンプレートが生PHP(WordPress以外にも応用が利く)

非オブジェクト指向(なんちゃってPHPerでも一応カスタマイズできる)

無償

Page 8: WordPress on Movable Type

テンプレートタグがHTMLも出力(データとHTMLを分離しにくい)

例:wp_get_archives, wp_list_categories

静的出力に向かない

ステージングサーバー/公開サーバーを分離しにくい

本体のコードが読みにくい(非オブジェクト指向・・・)

MVCが分離していない

Page 9: WordPress on Movable Type

WordPressとMovable Typeを組み合わせて相互補完

でもどうやって?

WPConnectorプラグイン

Page 10: WordPress on Movable Type

WordPressのオブジェクト(投稿等)をMTの管理画面で管理

Movable Typeのウェブサイトの機能でWordPressのブログをグループ化

WordPressのデータをMovable Typeのテンプレートタグで出力

WordPressの投稿等の状態が変化したときにMovable Typeのテンプレートを自動的に再構築(現状はインデックステンプレートのみ)

Page 11: WordPress on Movable Type
Page 12: WordPress on Movable Type
Page 13: WordPress on Movable Type

Webアプリケーション開発のフレームワークObject Relational Mapper(Data::ObjectDriver,MT::Object)

Model(Perlのロジック)

View(テンプレート)

Controller(mt.cgi/config.yaml)

新しい流れにも対応PSGI/nginx(Movable Type 5.2~)

Data API(Movable Type 6.0~)

Page 14: WordPress on Movable Type

クラス 内容

MT::Entry ブログ記事

MT::Page ウェブページ

MT::Asset アイテム

MT::Category カテゴリ

MT::Tag タグ

MT::Placement ブログ記事とカテゴリのリンク

MT::Blog ブログ

MT::Author ユーザー

Page 15: WordPress on Movable Type

IDが1番のブログから記事を読み込んでタイトルを出力

use MT::Entry;

my @entries = MT::Entry->load({ blog_id => 1 });for my $entry (@entries) {

print $entry->title . “¥n”;}• SQLは書かない

Page 16: WordPress on Movable Type

各種オブジェクト(MT::Entryなど)の一覧画面を出力するフレームワーク

以下の機能が標準実装各フィールドの表示オン/オフの切り替え

フィールドの値による並べ替えと検索

Ajaxによるページング

各クラスではフィールドの表示/検索/並べ替え方法のみ実装すれば良い

簡単なオブジェクト一覧画面ならyamlで定義可能

Page 17: WordPress on Movable Type

MT::Objectを継承

WordPressのオブジェクトを抽象化したクラス

WP::Objectを継承して各オブジェクトに対応するクラスを作成

Listing Frameworkで各オブジェクトの一覧を表示

Page 18: WordPress on Movable Type

クラス 内容

WP::PostObject投稿系(投稿,固定ページ,メディア,カスタム投稿タイプ等)

WP::PostMeta 投稿のメタ情報(カスタムフィールド)

WP::Taxonomy 分類系(カテゴリ,タグ,カスタム分類等)

WP::TermRelationship 投稿系と分類系のリンク

WP::Blog ブログ

WP::Comment コメント

WP::User ユーザー

Page 19: WordPress on Movable Type

投稿を読み込んでタイトルを出力

use WP::Post;

my @posts = WP::Post->load({ wp_blog_id => 1 });for my $post (@posts) {

print $post->title . “¥n”;}

Page 20: WordPress on Movable Type

my $terms = { status => 'publish' };my $args = {

sort => 'authored_on',direction => 'descend',limit => 5,join => WP::TermRelationship->join_on(

undef,{

object_id => ¥('= ' . WP::Post->datasource . '_id'),},{

join => WP::Category->join_on(undef,[

{ id => ¥('= ' . WP::TermRelationship->datasource . '_taxonomy_id') },{ name => ‘インターネット' },

],),unique => 1,

}),

};my @posts = WP::Post->load($terms, $args);

「インターネット」カテゴリの投稿を5件読み込み

Page 21: WordPress on Movable Type

MTとWPではデータベースのテーブル名やフィールド名の命名規則が異なる

MTテーブル名は「mt_オブジェクト名」「mt_entry」や「mt_blog」など

フィールド名は「オブジェクト名_情報名」「entry_title」や「blog_name」など

WPには厳密な規則はない

WPはブログごとにテーブルの組が作られる

WPのテーブルに対してビューを作って差異を吸収

Page 22: WordPress on Movable Type
Page 23: WordPress on Movable Type

ブログはMovable Typeで(WordPressは論外w)

Movable Typeコミュニティにぜひご参加をユーザーコミュニティサイト計画中

MTOSをフォークするかも?

プログラマが不足

Page 24: WordPress on Movable Type

イベントにもぜひご参加をMTDDC Meetup HOKKAIDO 2013(10月5日)

MTCafe Saitama 2013 Autumn(11月2日)

MTDDC Meetup NAGOYA 2014(2014年1月予定)

Page 25: WordPress on Movable Type
Page 26: WordPress on Movable Type

WPConnectorプラグインでMovable TypeからWordPressのデータを扱える

WP::ObjectでPerlのプログラムからWordPressのデータを扱える

Movable Type(およびそのコミュニティ)にぜひご協力を

Page 27: WordPress on Movable Type