WordPress on Movable Type
-
Upload
hajime-fujimoto -
Category
Technology
-
view
1.100 -
download
1
description
Transcript of WordPress on Movable Type
藤本 壱2013/9/20
YAPC::Asia Tokyo 2013
自己紹介
WPConnectorプラグインの概要
WPConnectorプラグインの内部動作
まとめ
藤本 壱(ふじもと はじめ)
兵庫県伊丹市出身
群馬県前橋市在住
本職はPC系のフリーライター
2004年秋からMovable Typeユーザー
さまざまなプラグインを開発
テーマ/プラグインが豊富
動的出力(管理者にとって手間が少ない)
テンプレートが生PHP(WordPress以外にも応用が利く)
非オブジェクト指向(なんちゃってPHPerでも一応カスタマイズできる)
無償
テンプレートタグがHTMLも出力(データとHTMLを分離しにくい)
例:wp_get_archives, wp_list_categories
静的出力に向かない
ステージングサーバー/公開サーバーを分離しにくい
本体のコードが読みにくい(非オブジェクト指向・・・)
MVCが分離していない
WordPressとMovable Typeを組み合わせて相互補完
でもどうやって?
WPConnectorプラグイン
WordPressのオブジェクト(投稿等)をMTの管理画面で管理
Movable Typeのウェブサイトの機能でWordPressのブログをグループ化
WordPressのデータをMovable Typeのテンプレートタグで出力
WordPressの投稿等の状態が変化したときに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~)
クラス 内容
MT::Entry ブログ記事
MT::Page ウェブページ
MT::Asset アイテム
MT::Category カテゴリ
MT::Tag タグ
MT::Placement ブログ記事とカテゴリのリンク
MT::Blog ブログ
MT::Author ユーザー
IDが1番のブログから記事を読み込んでタイトルを出力
use MT::Entry;
my @entries = MT::Entry->load({ blog_id => 1 });for my $entry (@entries) {
print $entry->title . “¥n”;}• SQLは書かない
各種オブジェクト(MT::Entryなど)の一覧画面を出力するフレームワーク
以下の機能が標準実装各フィールドの表示オン/オフの切り替え
フィールドの値による並べ替えと検索
Ajaxによるページング
各クラスではフィールドの表示/検索/並べ替え方法のみ実装すれば良い
簡単なオブジェクト一覧画面ならyamlで定義可能
MT::Objectを継承
WordPressのオブジェクトを抽象化したクラス
WP::Objectを継承して各オブジェクトに対応するクラスを作成
Listing Frameworkで各オブジェクトの一覧を表示
クラス 内容
WP::PostObject投稿系(投稿,固定ページ,メディア,カスタム投稿タイプ等)
WP::PostMeta 投稿のメタ情報(カスタムフィールド)
WP::Taxonomy 分類系(カテゴリ,タグ,カスタム分類等)
WP::TermRelationship 投稿系と分類系のリンク
WP::Blog ブログ
WP::Comment コメント
WP::User ユーザー
投稿を読み込んでタイトルを出力
use WP::Post;
my @posts = WP::Post->load({ wp_blog_id => 1 });for my $post (@posts) {
print $post->title . “¥n”;}
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件読み込み
MTとWPではデータベースのテーブル名やフィールド名の命名規則が異なる
MTテーブル名は「mt_オブジェクト名」「mt_entry」や「mt_blog」など
フィールド名は「オブジェクト名_情報名」「entry_title」や「blog_name」など
WPには厳密な規則はない
WPはブログごとにテーブルの組が作られる
WPのテーブルに対してビューを作って差異を吸収
ブログはMovable Typeで(WordPressは論外w)
Movable Typeコミュニティにぜひご参加をユーザーコミュニティサイト計画中
MTOSをフォークするかも?
プログラマが不足
イベントにもぜひご参加をMTDDC Meetup HOKKAIDO 2013(10月5日)
MTCafe Saitama 2013 Autumn(11月2日)
MTDDC Meetup NAGOYA 2014(2014年1月予定)
WPConnectorプラグインでMovable TypeからWordPressのデータを扱える
WP::ObjectでPerlのプログラムからWordPressのデータを扱える
Movable Type(およびそのコミュニティ)にぜひご協力を