PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 2 > 管理画面を自由に設計-カスタムオブジェクト(2)

2010年06月27日

管理画面を自由に設計-カスタムオブジェクト(2)

管理画面を自由に設計でき、Movable Type (Power CMS for MT)の管理画面でオブジェクトのデータベース管理を行えるようにするプラグイン「カスタムオブジェクト」の紹介の続きです。

カスタムオブジェクトのテンプレート、個別ページの作成及びプラグインでの拡張についてご紹介します。カスタムオブジェクトについてはひとつ前のエントリをご覧ください。

カスタムオブジェクト関連のテンプレート・タグ

タグはすべてスタティック/ダイナミック(DynamicMTML)の両方に対応しています。

ブロックタグ

タグ説明備考
MTCustomObjectsカスタムオブジェクトをループで出力します コンテクスト (MTVar)にセットされる値
__first__:ループの最初
__counter__:ループの何回目か
__odd__:奇数回目の出力
__even__:偶数回目の出力
__last__:ループの最後

指定出来るモディファイア
lastn (limit):何件表示するかを指定します。
offset:何件目から表示するかを指定します(デフォルト値:0)。
sort_order:昇順、降順を指定します(descend,ascend / デフォルト値:ascend)。
sort_by:ソートするカラム名を指定します(created_on, authored_on等 / デフォルト値:id)
blog_id:カスタムオブジェクトが属するブログのIDを指定する場合に記述します。
tag:タグが一致するカスタムオブジェクトを取得します。
group:カスタムオブジェクトグループ名を指定して、グループに属するカスタムオブジェクトを指定したソート順で出力します。groupモディファイアが指定されている場合、sort_byモディファイアの値は無視されます。
MTCustomObjectsHeader / MTCustomObjectsFooterMTCustomObjectsブロックタグの最初と最後に出力されます。
MTCustomObjectモディファイアidを指定してオブジェクトを1件ロードしてコンテクストをセットします。
MTCustomObjectTagsカスタムオブジェクトに付けられているタグをループ出力します。MTTagName、MTTagID等のタグ関連のMTタグが利用できます。 MT標準のMTTagsタグでtypeに'customobject'を指定することができます
MTCustomObjectAuthor カスタムオブジェクトを作成したユーザーのコンテクストをセットします。ブロックの中ではMTAuthor関連のタグが利用できます。
MTCustomObjectIfTaggedMTCustomObjectsまたはMTCustomObjectタグの中でコンテクストにセットされたカスタムオブジェクトがタグ付けされている場合に出力されます。

ファンクションタグ

ファンクションタグはMTCustomObjectLabelタグを除きMTCustomObjectsまたはMTCustomObjectタグの中でコンテクストにセットされたカスタムオブジェクトに関する情報を出力します。カスタムフィールドで指定した値についてはブログ記事等のカスタムフィールドと同様に出力可能です。日付け関係のタグでは日付けに関するモディファイアを利用可能です。

タグ説明
MTCustomObjectBlogIDカスタムオブジェクトのブログIDを出力します。
MTCustomObjectIDカスタムオブジェクトのIDを出力します。
MTCustomObjectNameカスタムオブジェクトの名前を出力します。
MTCustomObjectAuthorDisplayNameカスタムオブジェクトの作成者名を出力します。
MTCustomObjectAuthoredOnカスタムオブジェクトの作成日を出力します。
MTCustomObjectModifiedOnカスタムオブジェクトオブジェクトの更新日を出力します。

カスタムオブジェクトをページとして表示する

カスタムオブジェクトの一覧をインデックスアーカイブとして登録して出力することは可能ですが、個別のオブジェクトを表示させたいケースもあるかと思います。カスタムオブジェクトはアーカイブタイプに対応していないため個別ページを出力することはできませんが、Power CMS for MTのオプションプラグインViewerを利用することで動的に個別ページを出力させることができます。

Viewerプラグインの設置とテンプレートの作成

  • OptionsディレクトリからダウンロードしたViewerディレクトリの直下のcgi-scriptsディレクトリにあるmt-viewer.cgiをMTのインストールディレクトリに設置して実行可能なパーミッションを付与する
  • ViewerディレクトリをMTのpluginsディレクトリにコピー
  • Viewerディレクトリ直下のtmplディレクトリ以下に表示用のテンプレートを設置(例:customobject.tmpl)

mt-viewer.cgi (*)はtemplateパラメタに指定したテンプレートを解釈してページを表示します。上記の例では http://example.com/cgi-bin/mt/mt-viewer.cgi?template=customobject&blog_id=1 のようにして呼び出すことができます。

* CGIスクリプト名はテンプレートタグでMTViewerScriptで呼び出すことができます。この値は環境変数ViewerScriptをmt-config.cgiに記述することで変更することができます

テンプレートの中ではCGIスクリプトに渡された値がmt:var (MTGetVar)タグで取り出すことができます。上記リクエストの場合<mt:var name="template" escape="html">で「customobject」を受け取ることができます。

customobject.tmplに下記のように記述することで各ブログのテンプレートモジュールを使うことができます。

<$mt:include module="$template" blog_id="$blog_id"$>

パラメタにid指定がある場合は個別のカスタムオブジェクトのページを、id指定がない場合はカスタムオブジェクトの一覧を表示する簡単なテンプレートの例を示します。

<MTUnless name="id">
<MTCustomObjects lastn="30">
    <MTCustomObjectsHeader><ul></MTCustomObjectsHeader>
        <li><a href="<MTViewerScript>?blog_id=<$MTBlogID$>&amp;id=<MTCustomObjectID>&amp;template=<mt:var name="template" escape="html">"><$MTCustomObjectName$></a></li>
    <MTCustomObjectsFooter><ul></MTCustomObjectsFooter>
</MTCustomObjects>
<MTElse>
    <h1><$MTCustomObjectName escape="html"$>(<MTCustomobjectMore>)</h1>
    <MTCustomobjectImageMain>
        <p><img src="<$MTAssetURL$>" /></p>
    </MTCustomobjectImageMain>
    <MTCustomobjectBody filters="__default__">
    <ul>
    <li><__trans phrase="Created On"> : <$MTCustomObjectAuthoredOn$></li>
    <li><__trans phrase="Created By"> : <$MTCustomObjectAuthorDisplayName$></li>
    </li>
    </ul>
</MTElse>
</MTUnless>

プラグインによる拡張

カスタムオブジェクトプラグインを外部プラグインで拡張することが可能です。カスタムオブジェクト自体はMT::Objectのサブクラスですので、MTのAPIを利用してオブジェクトをロードしたりデータベースのカラムを拡張したりtemplate_param, template_source等のコールバックに対応したプラグインを書くことができます。

コールバック

コールバックをトリガとして処理を行うプラグインを書くことが可能です。

コールバックパラメタ説明
cms_pre_save.customobject$cb, $app, $obj, $original管理画面からカスタムオブジェクトを作成・更新した際に保存の直前にコールされます。
cms_post_save.customobject$cb, $app, $obj, $original管理画面からカスタムオブジェクトを作成・更新した際に保存の直後にコールされます。
cms_post_delete.customobject$cb, $app, $obj, $original管理画面からカスタムオブジェクトを削除した直後にコールされます。
post_publish.customobject$cb, $app, $obj, $original一覧画面からカスタムオブジェクトのステータスを「公開」に変更した時にコールされます。
post_unpublish.customobject$cb, $app, $obj, $original一覧画面からカスタムオブジェクトのステータスを「下書き」に変更した時にコールされます。

カテゴリー
PowerCMS 2
プラグイン

Recent Entries