Upload
hajime-fujimoto
View
1.526
Download
3
Embed Size (px)
DESCRIPTION
Movable Type上でWordPressの投稿等を扱うWPConnectorプラグインの紹介です
Citation preview
WordPress on Movable Type
2013/6/29
MTCafe Saitama 2013
藤本 壱
今日のアジェンダ
• 自己紹介
• WPConnectorプラグイン(開発中)の紹介
• Listing Frameworkによる投稿等の管理
• 多彩なテンプレートタグ
• WPConnectorプラグインの裏側
• WPConnectorプラグインのこれから
• まとめ
自己紹介
自己紹介その1
• 藤本 壱(ふじもと はじめ)
• 兵庫県伊丹市出身
• 群馬県前橋市在住
自己紹介その2
• 本職はPC系のフリーライター
• 2004年秋からMTユーザー
• さまざまなプラグインを開発
ブログももちろんMT
http://www.h-fj.com/blog/
WPConnectorプラグイン(開発中)の紹介
WordPressのメリット
• テーマ/プラグインが豊富
• 動的出力(管理者にとって手間が少ない)
• テンプレートが生PHP(WordPress以外にも応用が利く)
• 非オブジェクト指向(なんちゃってPHPプログラマでも一応カスタマイズできる)
• 無償
WordPressの弱点
• テンプレートタグがHTMLも出力(データとHTMLを分離しにくい)
– 例:wp_get_archives, wp_list_categories
• 静的出力に向かない
• ステージングサーバー/公開サーバーを分離しにくい
• 本体のコードが読みにくい(非オブジェクト指向・・・)
• MVCが分離していない
組み合わせて使おう
• WordPressとMovable Typeを組み合わせて相互補完
• でもどうやって?
WPConnectorプラグイン
WPConnectorプラグインの機能
• WordPressのオブジェクト(投稿等)をMTの管理画面で管理
• Movable Typeのウェブサイトの機能でWordPressのブログをグループ化
• WordPressのデータをMovable Typeのテンプレートタグで出力
• WordPressの投稿等の状態が変化したときにMovable Typeのテンプレートを自動的に再構築(現状はインデックステンプレートのみ)
Listing Frameworkによる投稿等の管理
WordPressの投稿等の一覧をMovable Typeの管理画面で
• Movable Typeの記事一覧と同じUI(Listing Framework)
• 表示するフィールドを自由に選択
• 条件を指定して投稿等を検索
• フィールドの値で投稿を並べ替え
• カスタム投稿タイプ/カスタム分類にも対応
デモをご覧ください
多彩なテンプレートタグ
WordPressのデータをMovable Typeのテンプレートで出力
• 300種類を超える多彩なテンプレートタグ
• WordPressの各種のデータを出力可能
• 複数ブログの混在出力が可能
• カスタム投稿タイプ/カスタム分類にも対応
事例①:カテゴリ別/年別アーカイブリストの出力
• カテゴリ別かつ年別のアーカイブリストを出力したい
WordPressで行うには?
• PHP+SQLでコードをガリガリ書く
• ノンプログラマでもできる?(自力でカスタマイズするのは厳しそう・・・)
WPConnectorなら
• 日付(年/月/週/日)/カテゴリ/タグを組み合わせたアーカイブリストを出力可能(MTWPArchiveListタグ)
• 特定の期間/カテゴリ/タグに限定することも可能
テンプレートの例
• Movable Type側(インデックステンプレート)<mt:WPArchiveList archive_type="Category-Yearly">
<mt:WPArchiveListHeader><ul></mt:WPArchiveListHeader><mt:WPArchiveListCategoryHeader>
<li><$mt:WPCategoryLabel$><ul>
</mt:WPArchiveListCategoryHeader><li>
<a href="<$mt:WPArchiveLink$>"><$mt:WPArchiveYear$>年</a>(<$mt:WPArchiveCount$>)
</li><mt:WPArchiveListCategoryFooter>
</ul></li>
</mt:WPArchiveListCategoryFooter><mt:WPArchiveListFooter><ul></mt:WPArchiveListFooter>
</mt:WPArchiveList>
• WordPress側ではincludeで上記テンプレートの出力ファイルを組み込む
応用:特定カテゴリの月別アーカイブリスト
• 「自作プラグイン」カテゴリの月別アーカイブリストを年でグループ化して出力
WPConnectorプラグインで実現<mt:WPArchiveList category="自作プラグイン" archive_type="Category-Monthly"><mt:WPArchiveListHeader>
<h2><$mt:WPCategoryLabel$></h2><ul>
</mt:WPArchiveListHeader><mt:WPArchiveListYearHeader>
<li><$mt:WPArchiveYear$>年<ul>
</mt:WPArchiveListYearHeader><li>
<a href="<$mt:WPArchiveLink$>"><$mt:WPArchiveMonth$>月</a>(<$mt:WPArchiveCount$>)
</li><mt:WPArchiveListYearFooter>
</ul></li>
</mt:WPArchiveListYearFooter><mt:WPArchiveListFooter><ul></mt:WPArchiveListFooter>
</mt:WPArchiveList>
事例②:複雑なカレンダー
• 特定のカテゴリに属する投稿のみ出力
• 日毎の投稿一覧を出力
WordPressで行うには?
• WordPress標準のカレンダーは機能が単純すぎる
• カレンダー系のプラグインが多数存在するが、ブラックボックスすぎて細かいカスタマイズをしずらい
WPConnectorプラグインなら
• 投稿/固定ページ/メディア/カスタム投稿タイプのカレンダー出力が可能(WPCalendarタグ)
• カテゴリ/タグ/カスタムフィールド等の条件に合う投稿等だけのカレンダー出力も可能
• それぞれの日に属する投稿等のリストも出力可能
テンプレートの例<table>
<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thr</th><th>Fri</th><th>Sat</th></tr><mt:WPCalendar month="201211" category="自作プラグイン">
<mt:WPCalendarWeekHeader><tr></mt:WPCalendarWeekHeader><td><mt:WPCalendarIfBlank>
<mt:Else>
<mt:WPCalendarIfPosts><$mt:WPCalendarDay$>(<$mt:WPCalendarPostCount$>)<ul><mt:WPPosts>
<li><a href="<$mt:WPPostPermalink$>"><$mt:WPPostTitle$></a><br />(<$mt:WPPostDate$>)</li></mt:WPPosts></ul>
</mt:WPCalendarIfPosts><mt:WPCalendarIfNoPosts>
<$mt:WPCalendarDay$>(0)</mt:WPCalendarIfNoPosts>
</mt:WPCalendarIfBlank></td><mt:WPCalendarWeekFooter></tr></mt:WPCalendarWeekFooter>
</mt:WPCalendar></table>
事例③:複数ブログを混在させた新記事一覧
• ポータル系サイト等で、複数ブログの 新記事を混在させて時系列に出力したい
WordPressで行うには?
• 結構面倒
– 方法1:各ブログから 新記事を読み込み、配列に代入してからソート
– 方法2: SQLを直接発行して各ブログの投稿のテーブルからデータを読み込む(ブログごとにテーブルが別なので面倒)
WPConnectorプラグインでは
• 投稿/固定ページ/メディア/カスタム投稿タイプに対応(WPPostsタグ等)
• 複数ブログを混在した情報出力が可能(include_blogsモディファイア)
• カテゴリ/タグ/カスタムフィールド等の条件を指定した出力も可能
テンプレートの例
<mt:WPPosts include_blogs=“all”><mt:WPPostsHeader><ul></mt:WPPostsHeader><li class="blog<$mt:WPBlogID$>"><a href="<$mt:WPPostPermalink$>"><$mt:WPPostTitle$>
</a>(<$mt:WPBlogName$>, <$mt:WPPostDate$>)
</li><mt:WPPostsFooter><ul></mt:WPPostsFooter>
</mt:WPPosts>
• Movable Type側(インデックステンプレート)
• WordPress側ではincludeで上記テンプレートの出力ファイルを組み込む
デモをご覧ください
WPConnectorプラグインの裏側
Movable Type is a framework
• Webアプリケーション開発のフレームワーク
– Object Relational Mapper(Data::ObjectDriver,MT::Object)
– Model(Perlのロジック)
– View(テンプレート)
– Controller(mt.cgi/config.yaml)
MT::Objectを継承したクラス
ウェブページMT::Page
ブログ記事とカテゴリのリンクMT::Placement
アイテムMT::Asset
タグMT::Tag
ユーザーMT::Author
ブログMT::Blog
カテゴリMT::Category
ブログ記事MT::Entry
内容クラス
MT::Objectの基本
• IDが1番のブログから記事を読み込んでタイトルを出力
use MT::Entry;
my @entries = MT::Entry->load({ blog_id => 1 });for my $entry (@entries) {
print $entry->title . “¥n”;}• SQLは書かない
WP::Object
• MT::Objectを継承
• WordPressのオブジェクトを抽象化したクラス
• WP::Objectを継承して各オブジェクトに対応するクラスを作成
WP::Objectを継承したクラス
投稿のメタ情報(カスタムフィールド)WP::PostMeta
投稿系と分類系のリンクWP::TermRelationship
ユーザーWP::User
コメントWP::Comment
ブログWP::Blog
分類系(カテゴリ,タグ,カスタム分類等)WP::Taxonomy
投稿系(投稿,固定ページ,メディア,カスタム投稿タイプ等)
WP::PostObject
内容クラス
WP::Objectの基本
• 投稿を読み込んでタイトルを出力
use WP::Post;
my @posts = WP::Post->load({ wp_blog_id => 1 });for my $post (@posts) {
print $post->title . “¥n”;}
WP::Objectの裏側
• MTとWPではデータベースのフィールド名の命名規則が異なる
• WPはブログごとにテーブルの組が作られる
• MySQLにビューを作って差異を吸収
WPConnectorプラグインのこれから
さらに実装したい機能
• 投稿等の一覧画面にカスタムフィールドも表示
• テンプレートタグをさらに追加
• アーカイブの出力
• WordPressの機能をMovable Typeから利用(カスタムメニューなど)
○○○::Objectで広がる世界
• WP::Objectと同様のことは他のCMS等でも可能(なはず)
• CMS
– Joomla, MODX, SoyCMS, a-blog cms,・・・
• Webアプリケーションフレームワーク
– Ruby on Rail, CakePHP,・・・
• Etc.
Everything on Movable Type
• ○○○::Objectを通して他のCMS等とMovable Typeを連携
– 他のCMS等のデータをMovable Typeのテンプレートタグで出力
– 他のCMS等のデータをMovable Typeの管理画面で利用
まとめ
• WPConnectorプラグインでWordPressとMovable Typeを連携できる
• Listing FrameworkでWordPressの投稿等を管理
• 多彩なテンプレートタグでWordPressのデータを柔軟に出力
• MT::Objectを拡張して様々なCMS等と連携すると面白いかも(Everything on Movable Type)
ご清聴ありがとうございました