Typeに追加した独自オブジェクトをダイナミックパブリッシングで出力する方法を紹介します。Typeに独自オブジェクトを追加する方法」の続きで、「Event」プラグインで「mt_event」というテーブルを定義し、定義したテーブルのデータに対してMTEventsタグとMTEventTitleタグを定義し、ダイナミックパブリッシングで次のテンプレートグの内容を出力できるようにします。<$mt:EventTitle$></mt:Events>1.プラグインの構成ダイナミックパブリッシング用のプラグインを作成するには、元記事の1項に示したディレクトリ構成に「php」ディレクトリを追加し、その配下に赤色で示した3つのファイルを追加します。function.mteventtitle.php追加した3つのファイルの意味は次の通りです。class.mt_event.php:mt_eventテーブルの定義block.mtevents.php:ブロックタグMTEventsの実装function.mteventtitle.php:ファンクションタグMTEventTitleの実装ファンクションタグは定義しているフィールドに応じて適宜追加してください。スタティックパブリッシング用として、config.yamlにテンプレートタグの定義が必要です。詳細は6項を参照してください。2.class.mt_event.phpclass.mt_event.phpでダイナミックパブリッシング用に動作するようテーブルを定義します。'event_meta_event_id');?>新しく追加したEventクラスはBaseObject(class.baseobject.php)を必ず継承してください。BaseObject{}$_tableにテーブル名を定義します。'mt_event';$_prefixにテーブルのプレフィックスを定義します。"event_";$_has_metaにメタテーブルの有無を定義します。true;最後にメタデータを利用する場合の設定を行います。'event_meta_event_id');3.block.mtevents.phpblock.mtevents.phpに次の内容を設定します。$content;}?>ダイナミックパブリッシングのブロックタグの基本的な構造は上記と同じですが、今回は独自オブジェクトなので、MTに実装されているfetch系のAPIの代わりに、追加したクラス定義をそのまま利用します(以下の部分)。$event->Find($where);下から3行目で定義したクラスclass.mt_event.phpを読み込みます。require_once('class.mt_event.php');Eventオブジェクトを作成します。Event;Eventオブジェクトに対してFind()を実行します。Findはclass.mt_event.php継承したBaseObjectに定義されたAPIで、このAPIでデータベースのデータを取得します。$event->Find($where);Findのパラメータには、SQLとなる変数$whereを設定します(1~7行目)。event_title";ここではblog_idとevent_titleでソートするように設定しています。この部分は必要に応じて適宜変更してください。4.function.mteventtitle.phpfunction.mteventtitle.phpに次の内容を設定します。$event->event_title;}?>コンテキストからstashに保存されたeventを取得します。$ctx-&gt;stash('event');取得した$eventには1レコード分のデータが入っているので、あとはフィールドを指定して返却すればOKです。$event-&gt;event_title;他のフィールド用のファンクションタグを作る場合は、ファイル名と関数名を変更し、以下の赤色部分を該当するフィールド名にしてください。$event->event_title;5.メタデータについて元記事で追加したテーブルにはメタデータを使う定義をしていないので、メタデータを使っていない場合は、ADODB_Active_Record::ClassHasManyの3行の設定は不要です。'event_meta_event_id');また、$_has_metaもfalseを設定しておくといいでしょう。false;なお独自テーブルでメタデータを利用する設定を行うには、lib/MT/Event.pmに次の1行を追加してください。ページが見つかりません。{main}</pre>6.スタティックパブリッシングの対応5項までの設定ではテンプレートにMTEventsタグを設定した時点で「タグがみつかりません」というエラーになります。これはconfig.yamlにテンプレートタグの定義を行っていないためです。よってconfig.yamlにテンプレートタグの定義を行います。lib/Event/Tag.pmに実装するのであれば次のように記述し、lib/Event/Tag.pmにhdlr_eventsとhdlr_event_titleを実装する必要があります。$Event::Event::Tags::hdlr_event_titleただし、スタティックパブリッシング用の拡張テンプレートタグの実装が必要ないのであれば、以下の赤色部分のように記述しておくとよいでしょう。{}7.参考サイトこの記事は以下のスライドを参考にさせて頂きました。ありがとうございました。*必須(非表示)URL(U):情報を保存する?コメントへの返信ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。すべてのご質問にはお答えできない可能性があります。Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。