AnotherCustomFields プラグインの日付型のフィールドを DynamicMTML に対応させる

前回に引き続き、今回は AnotherCustomFields プラグインで追加した日付型のフィールドを DynamicMTML に対応させる方法を紹介します。なお、この記事は前回の記事を前提として話を進めます。

まずは藤本さんのところで販売されているマニュアルに沿って、「日付と時刻」型のフィールドを追加してください。

今回は、次のようなのフィールドを EntryFields の config.yaml に追加しました。

  • フィールド名:startdate
  • ラベル名:開始日時
  • テンプレートタグ:MTEntryStartDate

なお、既存の config.yaml に追記してオブジェクトを拡張するときは、schema_version のバージョン番号を上げるのをお忘れなく。

開始日時フィールドに値を保存する

フィールドの追加が成功したら、前回作成したブログ記事(タイトル:AnotherCustomFields プラグイン)の編集画面を開き、開始日時フィールドに値を設定して保存します。今回は「2012-03-28 12:30:23」としました。

スタティック・パブリッシングで出力してみる

次に、前回作成した「AnotherCustomFields テスト」インデックステンプレートの上段を次のように変更してみます。

<h2>スタティック・パブリッシング</h2>

<p>mt:Date : <$mt:date format="%Y-%m-%d %H:%M:%S"$></p>
<mt:Entries id="2">
<ul>
<li><$mt:EntryTitle$></li>
<li><$mt:EntrySubTitle$></li>
<li><$mt:EntryStartDate format="%Y年%m月%d日 %H時%M分%S秒"$></li>
</ul>
</mt:Entries>

これを「保存と再構築」して表示させると次のようになります。format モディファイアもばっちりですね。

acf_dynamic_4

これと同じタグを、下段のダイナミックの方に書くと「ページが見つかりません」といった類いのエラーになりますので今は書かないでおきます。

テンプレートタグをダイナミックに対応させる

今回は、「MTEntryStartDate」という「ファンクションタグ」をダイナミックに対応させるので、ダイナミック・パブリッシング時のテンプレートタグの処理を記述するファイル名は、「function.mtentrystartdate.php」となります。

このファイルを前回と同様に下記のように EntryFields ディレクトリに保存します。

MT_DIR/plugins/EntryFields/php/function.mtentrystartdate.php

function.mtentrystartdate.php の内容

さて、function.mtentrystartdate.php の内容を書いていきます。

まずは前回と同様に、フィールドの値を取り出すところまで書いてみると、その内容は次のようになります。

<?php
function smarty_function_mtentrystartdate ($args, &$ctx) {
$entry = $ctx->stash('entry');
return $entry->entry_startdate;
}
?>

これで、最低限はMTEntryStartDate タグもダイナミックに対応しましたので、先ほどと同様に「AnotherCustomFields テスト」インデックステンプレートの下段にも MTEntryStartDate タグを追記します。

<h2>DynamicMTML</h2>

<mt:DynamicMTML>
<p>mt:Date : <$mt:date format="%Y-%m-%d %H:%M:%S"$></p>
<mt:Entries id="2">
<ul>
<li><$mt:EntryTitle$></li>
<li><$mt:EntrySubTitle$></li>
<li><$mt:EntryStartDate format="%Y年%m月%d日 %H時%M分%S秒"$></li>
</ul>
</mt:Entries>
</mt:DynamicMTML>

このテンプレートを保存と再構築して表示すると次のようになります。

acf_dynamic_5

フィールドの値はちゃんと出力されましたが、format モディファイアに対応していませんね。

format モディファイアに対応させる

このタグを MTEntryDate などと同様に format モディファイアに対応させるには、function.mtentrystartdate.php の内容を次のように変更します。

<?php
function smarty_function_mtentrystartdate ($args, &$ctx) {
  $entry = $ctx->stash('entry');
$args['ts'] = $entry->entry_startdate;
return $ctx->_hdlr_date($args, $ctx);
}
?>

フィールドの値($entry->entry_startdate)を $args['ts'] にセットし、それと $ctx を MT の _hdlr_date() に渡してあげればOKです。

これを表示させると次のようになります。

acf_dynamic_6

format モディファイアもちゃんと反映されましたね。

以上です。

  • このエントリーをはてなブックマークに追加
Just a second...